Ho un servizio WC.Net.tcp ospitato con il ServiceHost incorporato e quando eseguo alcuni test di stress ottengo uno strano comportamento. La prima volta che invio una serie di richieste, vengono risposte rapidamente da 5 a 10 richieste e il resto restituisce a intervalli di circa 2 secondi. La seconda volta che invio le richieste, 10 - 20 vengono restituite rapidamente e riposano con 2 intervalli di sencond.Prestazioni di WCF con net.tcp
Le ripetizioni sopra riportate consentono di ottenere oltre 100 richieste restituite rapidamente, ma se aspetto circa un minuto l'utilizzo della memoria del servizio diminuisce e le richieste tornano indietro a 5-10.
Il servizio che sto testando ha un piccolo ritardo, in modo da poter ottenere molte connessioni aperte allo stesso tempo, se questo ritardo viene rimosso le richieste ritornano così velocemente che ho forse 2-5 connessioni aperte allo stesso tempo . Questo ritardo è quello di simulare le connessioni DB e altre cose in uscita.
Dal comportamento sembra che ServiceHost stia allocando qualcosa, thread, istanze di classe, ma non riesco a capire di cosa si tratta.
Potrei avere un timer nel client che chiama il servizio per mantenerlo funzionante, ma sembra una cattiva soluzione.
Se ho un carico elevato sul servizio, il sistema scricchierà tutte le richieste rapidamente, ma se ho un periodo di bassa attività e quindi si verifica un aumento delle connessioni il servizio sarà lento.
Suppongo che la mia domanda sia: COSA è l'allocazione ottenuta durante il carico elevato del servizio WCF e COME posso configurare il servizio per preallocare più delle cose che vengono allocate.
EDIT: ho fatto un po 'di test, e guardando il taskmgr per il processo che posso vedere che quando la ServiceHost è 'riposando' ci sono 10 le discussioni aperte, ma quando inizio l'invio di richieste, il threadcount sale. Finché il threadcount è alto, il servicehost può elaborare rapidamente le richieste in arrivo, ma se sospetto l'invio delle richieste, il threadcount aperto diminuisce e le richieste successive iniziano a richiedere più tempo per l'elaborazione.
Ora, come posso dire al servicehost di mantenere aperto un gruppo di thread? O più del 10-12 che mantiene di default?
Grazie, ho controllato il sito, e le impostazioni ci sono già nel mio file di configurazione, con alti limiti, così in alto che dovrei essere in grado di gestire tutte le connessioni in entrata in una volta, invece di prima 5-10 e poi uno per 2 secondi. – Kim