Cunoașteți timpul mediu de răspuns al site-ului dvs.? Știți câți utilizatori concurenți poate gestiona site-ul dvs.?
Testarea de încărcare este esențială pentru ca aplicațiile web să cunoască capacitatea site-ului web. Dacă doriți să alegeți serverul web, atunci unul dintre primele lucruri pe care doriți să le faceți este să efectuați testarea de încărcare și să vedeți care dintre ele funcționează bine pentru dvs.
Benchmarking-ul vă poate ajuta să decideți;
- Care server web funcționează cel mai bine
- Numărul de servere de care aveți nevoie pentru a servi x număr de cereri
- Ce configurație vă oferă cele mai bune rezultate
- Care stive de tehnologie au rezultate mai bune
- Când site-ul dvs. va funcționa mai lent sau defect
Există mai multe instrumente online pentru a efectua un test de stres; totuși, dacă sunteți în căutarea unei soluții interne sau doriți să evaluați doar performanța serverului web, atunci puteți utiliza ApacheBench și, alternativ, unele dintre instrumentele enumerate mai jos.
Am folosit serverul web Apache și Nginx găzduit pe DigitalOcean pentru a-l testa.
Cuprins
ApacheBench
ApacheBench (ab) este un program de linie de comandă open-source care funcționează cu orice server web. În această postare, voi explica cum să instalez acest mic program și să efectuez testul de încărcare pentru a evalua rezultatele.
Apache
Să instalăm ApacheBench folosind o comandă yum.
yum install httpd-tools
Dacă aveți deja httpd-tools, atunci puteți ignora acest lucru.
Acum, să vedem cum funcționează pentru 5000 de solicitări cu o concurență de 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] ~]#
Deci, după cum puteți vedea, Apache a gestionat 373 de solicitări pe secundă și a durat un total de 13.389 de secunde pentru a servi cererile totale.
Acum știți că configurația implicită poate servi aceste multe solicitări, așa că atunci când faceți modificări de configurare, puteți face din nou testul pentru a compara rezultatele și a alege pe cea mai bună.
Nginx
Să facem testul ce am făcut pentru Apache, astfel încât să puteți compara care dintre ele are performanțe mai bune.
[[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] ~]#
WOW!
Ai văzut asta?
Nginx a gestionat 6593 de solicitări pe secundă! Un castigator.
Așa că, doar comparând cu două servere web, veți avea o idee pe care să alegeți pentru aplicația dvs. web.
Testul de mai sus este pe CentOS 6.8, 64 de biți. Puteți încerca mai multe combinații de versiunea OS și Web Server pentru rezultate optime.
Nu-ți place ApacheBench din orice motiv? Nu vă faceți griji, există o mulțime de altele pe care le puteți folosi pentru a efectua încărcarea HTTP.
ASEDIU
ASEDIU este un utilitar de testare a încărcării HTTP acceptat pe UNIX. Puteți pune mai multe adrese URL într-un fișier text pentru a încărca teste. Puteți instala asediu folosind yum.
# yum install siege
Să rulăm testul cu 500 de solicitări simultane timp de 5 secunde.
[[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] ~]#
Pentru a defalca parametrii.
-q – să-l ruleze în liniște (nu afișează detaliile cererii)
-t – rulați timp de 5 secunde
-c – 500 de cereri concurente
Deci, după cum puteți vedea, disponibilitatea este de 100%, iar timpul de răspuns este de 0,04 secunde. Puteți modifica parametrul testului de încărcare în funcție de obiectivul dvs.
Ali
Ali este un instrument de testare a sarcinii relativ nou pentru a efectua analize în timp real. Suportă mai multe platforme de instalat, inclusiv Docker.
Odată instalat, executați ali pentru a vedea detaliile de utilizare.
[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]:~#
După cum puteți vedea mai sus, aveți opțiunea de a trimite anteturi HTTP, durata testului, limita de rată, timeout și multe altele. Am făcut un test rapid pe tipstrick.ro Tools și iată cum arată rezultatul.
Raportul este interactiv și oferă informații detaliate despre latența.
Gobench
Gobench este scris în limbajul Go și un utilitar simplu de testare a încărcării pentru a evalua performanța serverului web. Acceptă mai mult de 20.000 de utilizatori concurenți, ceea ce ApacheBench nu.
Apache JMeter
JMeter este unul dintre cele mai populare instrumente open-source pentru măsurarea performanței aplicațiilor web. JMeter este o aplicație bazată pe Java și nu doar un server web, dar o puteți folosi împotriva PHP, Java. ASP.net, SOAP, REST etc.
JMeter a primit GUI decent și prietenos, iar cea mai recentă versiune 3.0 necesită Java 7 sau o versiune ulterioară pentru a lansa aplicația. Trebuie să încercați JMeter dacă scopul dvs. este să optimizați performanța aplicației web.
lucrare
lucrare este un alt instrument modern de măsurare a performanței pentru a pune o sarcină pe serverul dvs. web și vă oferă detalii de latență, solicitare pe secundă, transfer pe secundă etc.
Cu wrk, puteți specifica să rulați un test de încărcare cu un număr de fire.
Să luăm un exemplu de rulare a unui test timp de 5 minute cu 500 de utilizatori concurenți cu 8 fire.
wrk –t8 –c500 -d300s http://localhost
Autotun
Inspirat de muncă, tun automat este scris în Node.js. Îl puteți folosi programatic, prin API sau utilitar independent. Tot ce aveți nevoie este instalarea NodeJS ca o condiție prealabilă.
Puteți controla o serie de conexiuni, solicitări, durată, lucrători, timeout, rata de conectare și puteți oferi o mulțime de opțiuni pentru a compara aplicațiile dvs. web.
Curl-loader
curl-loader este scris în C pentru a simula încărcarea aplicației și acceptă SSL/TLS. Împreună cu testul paginii web, puteți utiliza și acest instrument open-source pentru a efectua încărcare pe serverele FTP.
Puteți crea un plan de testare cu o combinație de HTTP, HTTPS, FTP și FTPS într-o singură configurație de lot.
httperf
The httperf este un instrument de înaltă performanță care se concentrează pe benchmark-uri la nivel micro și macro. Acceptă protocoalele HTTP/1.1 și SSL.
Dacă aveți numărul așteptat de utilizatori concurenți și doriți să testați dacă serverul dvs. web poate servi un număr de cereri, puteți utiliza următoarea comandă.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Comanda de mai sus va testa cu 100 de solicitări pe secundă pentru 1000 de solicitări HTTP.
Tsung
Tsung este un instrument de testare a stresului distribuit multi-protocol pentru a sublinia serverul HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Acceptă HTTP/1.0, HTTP/1.1, iar cookie-urile sunt gestionate automat.
Generarea unui raport este fezabilă cu Tsung.
Concluzie
Sper că instrumentele de evaluare comparativă de mai sus vă oferă o idee despre performanța serverului dvs. web și decideți ce funcționează cel mai bine pentru proiectul dvs.
În continuare, nu uitați să monitorizați performanța site-ului dvs.