Test della densità di connessione di SignalR con Crank
Avviso
Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.
Questo articolo descrive come usare lo strumento Crank per testare un'applicazione con più client simulati.
Dopo aver eseguito l'applicazione nel relativo ambiente di hosting (un ruolo Web di Azure, IIS o self-hosted usando Owin), è possibile testare la risposta dell'applicazione a un livello elevato di densità di connessione usando lo strumento Crank. L'ambiente di hosting può essere un server Internet Information Services (IIS), un host Owin o un ruolo Web di Azure. Nota: i contatori delle prestazioni non sono disponibili in Servizio app di Azure App Web, quindi non sarà possibile ottenere dati sulle prestazioni da un test di densità di connessione.
La densità di connessione fa riferimento al numero di connessioni TCP simultanee che possono essere stabilite in un server. Ogni connessione TCP comporta il proprio sovraccarico e l'apertura di un numero elevato di connessioni inattive creerà un collo di bottiglia di memoria.
La codebase signalR include uno strumento di test di carico denominato Crank. La versione più recente di Crank è disponibile nel ramo Dev in GitHub. È possibile scaricare un archivio Zip del ramo Dev della codebase signalR qui.
Crank può essere usato per saturazione completa della memoria del server per calcolare il numero totale di connessioni inattive possibili nell'hardware del server. In alternativa, è anche possibile usare Crank per testare il server con una certa quantità di pressione di memoria, aumentando le connessioni fino a quando non viene raggiunto un conteggio specifico o una soglia di memoria specifica.
Quando si esegue il test, è importante usare client remoti per evitare qualsiasi concorrenza per le risorse (ad esempio, connessioni TCP e memoria). Monitorare i client per assicurarsi che non raggiungano colli di bottiglia che potrebbero impedire al server di raggiungere la capacità completa (memoria o CPU). Potrebbe essere necessario aumentare il numero di client per caricare completamente il server.
Esecuzione di un test di densità di connessione
Questa sezione descrive i passaggi necessari per eseguire un test di densità di connessione in un'applicazione SignalR.
- Scaricare e compilare il ramo Dev della codebase signalR. In un prompt dei comandi passare alla <directory> del progetto\src\Microsoft.AspNet.SignalR.Crank\bin\debug.
- Distribuire l'applicazione nell'ambiente di hosting previsto. Prendere nota dell'endpoint usato dall'applicazione; Ad esempio, nell'applicazione creata nell'esercitazione Introduzione, l'endpoint è
http://<yourhost>:8080/signalr
. - Installare i contatori delle prestazioni SignalR nel server. Se l'applicazione è in esecuzione in Azure, vedere Uso dei contatori delle prestazioni signalR in un ruolo Web di Azure.
Dopo aver scaricato e compilato la codebase e installato i contatori delle prestazioni nell'host, è possibile trovare lo strumento da riga di comando Crank nella src\Microsoft.AspNet.SignalR.Crank\bin\Debug
cartella.
Le opzioni disponibili per lo strumento Crank includono:
- /?: mostra la schermata della Guida. Le opzioni disponibili vengono visualizzate anche se il parametro Url viene omesso.
- /Url: URL per le connessioni SignalR. Questo parametro è obbligatorio. Per un'applicazione SignalR usando il mapping predefinito, il percorso termina in "/signalr".
- /Transport: nome del trasporto usato. Il valore predefinito è
auto
, che selezionerà il protocollo migliore disponibile. Le opzioni includonoWebSockets
,ServerSentEvents
eForeverFrame
LongPolling
( non è un'opzione per Crank, poiché il client .NET anziché Internet Explorer viene usato). Per altre informazioni sul modo in cui SignalR seleziona i trasporti, vedere Trasporti e fallback. - /BatchSize: numero di client aggiunti in ogni batch. Il valore predefinito è 50.
- /ConnectInterval: intervallo in millisecondi tra l'aggiunta di connessioni. Il valore predefinito è 500.
- /Connections: numero di connessioni usate per testare il carico dell'applicazione. Il valore predefinito è 100.000.
- /ConnectTimeout: timeout in secondi prima di interrompere il test. Il valore predefinito è 300.
- MinServerMBytes: il megabyte minimo del server da raggiungere. Il valore predefinito è 500.
- SendBytes: dimensioni del payload inviato al server in byte. Il valore predefinito è 0.
- SendInterval: ritardo in millisecondi tra i messaggi nel server. Il valore predefinito è 500.
- SendTimeout: timeout in millisecondi per i messaggi nel server. Il valore predefinito è 300.
- ControllerUrl: URL in cui un client ospiterà un hub controller. Il valore predefinito è Null (nessun hub controller). L'hub del controller viene avviato all'avvio della sessione Crank; non viene effettuato alcun ulteriore contatto tra l'hub del controller e Crank.
- NumClients: numero di client simulati da connettere all'applicazione. Il valore predefinito è uno.
- Logfile: nome file del file di log per l'esecuzione del test. Il valore predefinito è
crank.csv
. - SampleInterval: tempo in millisecondi tra esempi di contatori delle prestazioni. Il valore predefinito è 1000.
- SignalRInstance: nome dell'istanza per i contatori delle prestazioni nel server. Il valore predefinito consiste nell'usare lo stato della connessione client.
Esempio
Il comando seguente testerà un sito chiamato pfsignalr
in Azure che ospita un'applicazione sulla porta 8080 con un hub denominato "ControllerHub", usando 100 connessioni.
crank /Connections:100 /Url:http://pfsignalr.cloudapp.net:8080/signalr