Conosci il tempo medio di risposta del tuo sito web? Sai quanti utenti simultanei può gestire il tuo sito?
Il test di carico è essenziale per le applicazioni web per conoscere la capacità del sito web. Se devi scegliere il server web, una delle prime cose che vuoi fare è eseguire il test di carico e vedere quale funziona meglio per te.
Il benchmarking può aiutarti a decidere;
- Quale server web funziona meglio
- Numero di server necessari per servire x numero di richieste
- Quale configurazione ti dà i migliori risultati
- Quali stack tecnologici funzionano meglio
- Quando il tuo sito funzionerà più lentamente o si guasterà
Esistono diversi strumenti online per eseguire uno stress test; tuttavia, se stai cercando una soluzione interna o desideri confrontare solo le prestazioni del server Web, puoi utilizzare ApacheBench e in alternativa alcuni degli strumenti elencati di seguito.
Ho utilizzato il server Web Apache e Nginx ospitato su Oceano Digitale per testarlo.
Sommario:
ApacheBench
ApacheBench (ab) è un programma a riga di comando open source che funziona con qualsiasi server web. In questo post, spiegherò come installare questo piccolo programma ed eseguire il test di carico per confrontare i risultati.
Apache
Installiamo ApacheBench usando un comando yum.
yum install httpd-tools
Se hai già httpd-tools, puoi ignorarlo.
Ora, vediamo come si comporta per 5000 richieste con una concorrenza di 500.
[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache/2.2.15 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 4961 bytes Concurrency Level: 500 Time taken for tests: 13.389 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Non-2xx responses: 5058 Total transferred: 26094222 bytes HTML transferred: 25092738 bytes Requests per second: 373.45 [#/sec] (mean) Time per request: 1338.866 [ms] (mean) Time per request: 2.678 [ms] (mean, across all concurrent requests) Transfer rate: 1903.30 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 42 20.8 41 1000 Processing: 0 428 2116.5 65 13310 Waiting: 0 416 2117.7 55 13303 Total: 51 470 2121.0 102 13378 Percentage of the requests served within a certain time (ms) 50% 102 66% 117 75% 130 80% 132 90% 149 95% 255 98% 13377 99% 13378 100% 13378 (longest request) [[email protected] ~]#
Quindi, come puoi vedere, Apache ha gestito 373 richieste al secondo e ci sono voluti un totale di 13.389 secondi per soddisfare le richieste totali.
Ora sai che la configurazione predefinita può soddisfare queste numerose richieste, quindi quando apporti modifiche alla configurazione puoi ripetere il test per confrontare i risultati e scegliere quello migliore.
Nginx
Facciamo il test che abbiamo fatto per Apache in modo da poter confrontare quale funziona meglio.
[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: nginx/1.10.1 Server Hostname: localhost Server Port: 80 Document Path: / Document Length: 3698 bytes Concurrency Level: 500 Time taken for tests: 0.758 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Total transferred: 19660000 bytes HTML transferred: 18490000 bytes Requests per second: 6593.48 [#/sec] (mean) Time per request: 75.832 [ms] (mean) Time per request: 0.152 [ms] (mean, across all concurrent requests) Transfer rate: 25317.93 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 6 11.0 2 53 Processing: 5 19 8.2 17 53 Waiting: 0 18 8.2 16 47 Total: 10 25 17.4 18 79 Percentage of the requests served within a certain time (ms) 50% 18 66% 21 75% 21 80% 22 90% 69 95% 73 98% 75 99% 76 00% 79 (longest request) [[email protected] ~]#
OH!
Hai visto che?
Nginx ha gestito 6593 richieste al secondo! Un vincitore.
Quindi vedi che solo confrontando con due server web avrai un’idea di quale scegliere per la tua applicazione web.
Il test sopra è su CentOS 6.8, 64 bit. Puoi provare più combinazioni di versione del sistema operativo e del server Web per ottenere risultati ottimali.
Non ti piace ApacheBench per qualsiasi motivo? Nessun problema, ce ne sono molti altri che puoi utilizzare per eseguire il caricamento HTTP.
ASSEDIO
ASSEDIO è un’utilità di test di carico HTTP supportata su UNIX. Puoi inserire più URL in un file di testo per caricare i test. Puoi installare assedio usando yum.
# yum install siege
Eseguiamo il test con 500 richieste simultanee per 5 secondi.
[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/ Lifting the server siege... done. Transactions: 4323 hits Availability: 100.00 % Elapsed time: 4.60 secs Data transferred: 15.25 MB Response time: 0.04 secs Transaction rate: 939.78 trans/sec Throughput: 3.31 MB/sec Concurrency: 37.97 Successful transactions: 4323 Failed transactions: 0 Longest transaction: 1.04 Shortest transaction: 0.00 [[email protected] ~]#
Per abbattere i parametri.
-q – per eseguirlo in silenzio (non mostrando i dettagli della richiesta)
-t – eseguire per 5 secondi
-c – 500 richieste simultanee
Quindi, come puoi vedere, la disponibilità è del 100% e il tempo di risposta è di 0,04 secondi. Puoi modificare il parametro del test di carico in base al tuo obiettivo.
Ali
Ali è uno strumento di test di carico relativamente nuovo per eseguire analisi in tempo reale. Supporta più piattaforme da installare, incluso Docker.
Una volta installato, esegui ali per vedere i dettagli di utilizzo.
[email protected]:~# ali no target given Usage: ali [flags] <target URL> Flags: -b, --body string A request body to be sent. -B, --body-file string The path to file whose content will be set as the http request body. --debug Run in debug mode. -d, --duration duration The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s) -H, --header strings A request header to be sent. Can be used multiple times to send multiple headers. -k, --keepalive Use persistent connections. (default true) -M, --max-body int Max bytes to capture from response bodies. Give -1 for no limit. (default -1) -m, --method string An HTTP request method for each request. (default "GET") -r, --rate int The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50) -t, --timeout duration The timeout for each request. 0s means to disable timeouts. (default 30s) -v, --version Print the current version. Examples: ali --duration=10m --rate=100 http://host.xz Author: Ryo Nakao <[email protected]> [email protected]:~#
Come puoi vedere sopra, hai la possibilità di inviare intestazioni HTTP, durata del test, limite di velocità, timeout e altro. Ho fatto un rapido test su winadmin.it Tools ed ecco l’output simile.
Il report è interattivo e fornisce informazioni dettagliate sulla latenza.
Gobench
Gobench è scritto in linguaggio Go e semplice utilità di test di carico per confrontare le prestazioni del server web. Supporta più di 20.000 utenti simultanei che ApacheBench non supporta.
Apache JMeter
JMeter è uno degli strumenti open source più popolari per misurare le prestazioni delle applicazioni web. JMeter è un’applicazione basata su Java e non solo un server web, ma puoi usarlo contro PHP, Java. ASP.net, SOAP, REST, ecc.
JMeter ha una GUI decente e amichevole e l’ultima versione 3.0 richiede Java 7 o versioni successive per avviare l’applicazione. Devi provare JMeter se il tuo obiettivo è ottimizzare le prestazioni dell’applicazione web.
lavoro
lavoro è un altro moderno strumento di misurazione delle prestazioni per caricare il tuo server Web e fornirti dettagli su latenza, richiesta al secondo, trasferimento al secondo, ecc.
Con wrk, puoi specificare di eseguire un test di carico con un numero di thread.
Facciamo un esempio di esecuzione di un test per 5 minuti con 500 utenti simultanei con 8 thread.
wrk –t8 –c500 -d300s http://localhost
Cannone automatico
Ispirato dal lavoro, autocannon è scritto in Node.js. Puoi usarlo a livello di programmazione, tramite API o utilità autonoma. Tutto ciò di cui hai bisogno è NodeJS installato come prerequisito.
Puoi controllare una serie di connessioni, richieste, durata, lavoratori, timeout, velocità di connessione e offrire tantissime opzioni per confrontare le tue applicazioni web.
Caricatore di ricci
caricatore di ricci è scritto in C per simulare il carico dell’applicazione e supporta SSL/TLS. Insieme al test della pagina Web, puoi anche utilizzare questo strumento open source per eseguire il caricamento sui server FTP.
Puoi creare un piano di test con una combinazione di HTTP, HTTPS, FTP e FTPS in un’unica configurazione batch.
httperf
Il httperf è uno strumento ad alte prestazioni che si concentra su benchmark di livello micro e macro. Supporta i protocolli HTTP/1.1 e SSL.
Se hai il numero previsto di utenti simultanei e stai cercando di verificare se il tuo server web può servire un numero di richieste, puoi usare il seguente comando.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Il comando precedente testerà con 100 richieste al secondo per 1000 richieste HTTP.
Tsung
Tsung è uno strumento di stress test distribuito multiprotocollo per stressare server HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Supporta HTTP/1.0, HTTP/1.1 e i cookie vengono gestiti automaticamente.
La generazione di un rapporto è fattibile con Tsung.
Conclusione
Spero che gli strumenti di benchmarking di cui sopra ti diano un’idea delle prestazioni del tuo server web e decidano cosa funziona meglio per il tuo progetto.
Successivamente, non dimenticare di monitorare le prestazioni del tuo sito web.