Tant és si s'usa Nginx, Apache, Lighttpd o un altre, qualsevol administrador de xarxa que tingui un servidor web desitjarà en algun punt saber què tan ràpid respon el servidor web a un nombre determinat de consultes.
Apache Benchmark + gnuplot
En aquesta ocasió farem servir una eina anomenada Apatxe Benchmark, Que encara que té 'apache' en el seu nom, NO serveix només per mesurar el rendiment d'Apache, sinó també es pot usar per Nginx i altres. En realitat, jo el faré servir per mesurar el rendiment de Nginx.
Farem servir a més gnuplot, Que ens servirà per fer gràfiques com aquestes amb unes poques línies:
Instal·lació de l'Apache Benchmark i gnuplot
Apache Benchmark és una eina que podrem utilitzar després d'instal·lar el paquet d'Apache, gnuplot estarà disponible després d'instal·lar el paquet d'igual nom. Pel que llavors ...
En distros com Debian, Ubuntu o similars:
sudo apt-get install apache2 gnuplot
En distros com ArchLinux o derivades:
sudo pacman -S apache gnuplot
Usant Apache Benchmark
El que farem serà enviar un nombre determinat de peticions (100) en grups de diverses (de 20 a 20) a un lloc determinat. El resultat el guardarem en un fitxer .csv (resultado.csv) per després processar-amb GNUPloit, la línia seria:
ab -g resultados.csv -n 100 -c 20 http://nuestro-sitio-web.com/
Aquest és l'output o log que em mostra quan faig la prova a un lloc en la meva xarxa:
This is ApacheBench, Version 2.3 <$ Revision: 1638069 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking gutl.jovenclub.cu (be patient) ..... done Servidor programari: nginx Server Hostname: gutl.jovenclub.cu Server Port: 80 Document Path: / Document Length: 206 bytes Concurrency Level: 20 Time taken for tests: 0.101 seconds Complete requests: 100 Failed requests: 27 (Connect: 0, Receive: 0, Length: 27, Exceptions: 0) Non-2xx responses: 73 Total transferred: 1310933 bytes HTML transferred: 1288952 bytes Requests per second: 993.24 [# / sec] (pixen) Time per request: 20.136 [ms] (pixen) Time per request: 1.007 [ms] (pixen, across all concurrent requests) Transfer rate: 12715.49 [Kbytes / sec] received Connection Times (ms) min pixen [+/- sd] mit max Connect: 0 1 0.2 1 1 Processing: 1 gen 17 abril 24.8 Waiting: 4 gen 86 1 15 Total: 21.5 gen 4 76 1 Percentage of the requests served within a certain time (ms) 18% 24.8 el 5% 87 50% 5 66% 6 75% 22 80% 41 90% 62 95% 80 100% 87 (longest request)
Els he marcat en vermell el que considero jo, és el més important, que ve sent més o menys:
- Dades de l'servidor que estem provant, així com l'URL en qüestió.
- Quantitat de peticions per segon.
- Quants mil·lisegons va demorar el servidor a atendre la petició que més va demorar, és a dir, la que més va trigar a ser atesa.
Amb aquesta informació poden tenir una idea de quant demorarà el servidor en atendre aquesta quantitat de sol·licituds, poden després afegir un millor sistema de memòria cau, desactivar mòduls que no facin servir, etc etc, tornar a executar la prova i veure si el rendiment va millorar o no .
Altres opcions o paràmetres útils d'Apache Benchmark:
-k -H 'Accept-Encoding: gzip, deflate' : Amb això ab acceptarà la memòria cau i compressió que el servidor tingui configurat, de manera que els temps seran inferiors.
-f urls.txt : Llavors en comptes de sol provar el index de el lloc, anirà efectuant proves en les URL que especifiquem en aquest arxiu.
En fi ... tirin-li un ull a man ab perquè vegin.
Mostra en un gràfic el resultat:
Per posar en una imatge aquest output, és a dir, en un mitjà més visual i que moltes vegades, és tot el que els directius aconsegueixen entendre ... per a això farem servir com ja vaig dir abans, gnuplot
En la mateixa carpeta on tenim l'arxiu resultados.csv (que recorden, acabem de generar amb la comanda anterior) Crearem un fitxer anomenat gnuplot.p:
nano plot.p
En ell hi posarem el següent:
setembre terminal png size 600 setembre output "resultats.png"Set title"100 peticions, 20 peticions concurrents "set size ràtio 0.6 setembre grid i instal·lacions per xlabel"peticions"Set ylabel"temps de resposta (ms)"Plot"resultats.csv"Using 9 smooth sbezier with lines title"gutl.jovenclub.cu"
Els he assenyalat en vermell el que haurien de revisar sempre. O sigui i de dalt a baix:
- Nom de l'arxiu d'imatge que es generarà
- Quantitat de peticions totals i concurrents.
- Nom de l'arxiu que recentment acabem de generar.
- Domini sobre el qual treballem.
Un cop posem això, guardem i vam sortir (Ctrl + O i després Ctrl + X), Executarem el següent:
gnuplot plot.p
I ja està, això ens generarà el gràfic amb el nom desitjat, el meu és:
Apache Benchmark té un munt més d'opcions, són moltes combinacions també que podem usar perquè la nostra prova de rendiment sigui encara més completa.
Però bé, això ha estat el bàsic 😉
Enjoy!
Interessant apatxe benchmark, el de gnuplot no el coneixia és possible modificar l'estil de la sortida ?? dic com per a un informe formal.
Salutacions des de Xile.
Sí, hi ha un munt de configuracions a la xarxa per gnuplot, busca per Google a veure si trobes alguna prou seriosa o professional perquè la facis servir, perquè ja això és gust de cadascú 🙂
Ummm ho vaig a provar ara mateix en un server apache virtual que tinc corrent per veure com va això, pel que fa a GUTL, com que es dispara d'una manera molt ràpida a partir de les 80 peticions no ?, a veure que 100 ms no són res, però em crida l'atenció la pujada que dóna per 10 peteciones mes comparat amb 70 a 80 amb 80 a 90
Ha de ser per la cua o quantitat de fils màxims a atendre de forma simultània. No obstant això, la prova la vaig fer sense gzip, sense deflate, sense memòria cau ni res 😉
Molt interessant, sobretot per l'ús de gnuplot. Pel que veig pot ser usat per generar gràfics a partir de gairebé qualsevol conjunt de dades o no? ...
Sí clar, li passes les dades en un arxiu separat per comes o alguna cosa així, li indiques com processar-los en el fitxer de configuració, i llest
Hola, sempre me la pas llegint aquest bloc però no he comentat cap article, i aquesta em sembla una bona oportunitat.
El que vull compartir-és que aquest tipus de gràfic pot malinterpretar, pel fet que Apache Bench ordena el resultat usant ttime (total time) en comptes del temps seqüencial. Encara que les dades segueixen sent veritables, probablement el gràfic no mostri el que volem.
Aqui els deixo el link on ho vaig llegir.
http://www.bradlanders.com/2013/04/15/apache-bench-and-gnuplot-youre-probably-doing-it-wrong/
Salutacions.
Apache Benchmark no és la millor eina per mesurar el rendiment de servidors HTTP en equips amb múltiples nuclis, a més, només 100 peticions amb 20 connexions concurrents és una prova molt feble, una mica més realista serien 1,000 o 10,000 peticions amb 100 connexions concurrents (és sabut que Nginx és una de les aplicacions capaces de servir més de 10,000 peticions per segon) i per això és millor fer servir una eina com weighttp, que aquesta concebuda per equips amb múltiples nuclis i fa servir epoll que és més ràpid, a diferència d'Apache Bench que fa servir un sol fil i un mecanisme de gestió d'esdeveniments menys eficient.
Per aterrar meu punt, suposant que el servidor tingui només 4 nuclis:
weighttp -n 10000 -c 100 -t 4 -k «http://el nostre-lloc-web.com/»
Hola a tots,
a l'traçar el gràfic (a partir de l'CSV) amb gnuplot em dóna el SGTE error, ¿em podeu dir com solucionar-ho?
«Plot.p», line 8: warning: Skipping data file with no validesa points
plot «grafica.csv» using 9 smooth sbezier with lines title «AB - localhost / web»
^
«Plot.p», line 8: x range is invalid
Amb gnuplot, tmbién puc generar pàgines HTML?