Apache Benchmark + gnuplot: Mesurar i graficar el rendiment del teu servidor web

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.

Managed-Services-Server-Management-e1368625038693

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:

resultats

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

Només ens cal instal·lar el paquet d'Apache, no necessitem iniciar ni configurar alguna cosa més, amb instal·lar-n'hi haurà prou.

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/

És molt important posar el / final a la URL de el lloc a mesurar.

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:

  1. Dades de l'servidor que estem provant, així com l'URL en qüestió.
  2. Quantitat de peticions per segon.
  3. 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 .

Els recomano córrer la prova 2 o 3 vegades, perquè creuen una mena marge, ja que poques vegades els resultats de dues proves seguides són idèntics.

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:

  1. Nom de l'arxiu d'imatge que es generarà
  2. Quantitat de peticions totals i concurrents.
  3. Nom de l'arxiu que recentment acabem de generar.
  4. 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:

results2

Fi!

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!


9 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Francisco va dir

    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.

    1.    KZKG ^ Gaara va dir

      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ú 🙂

  2.   Wolf119 va dir

    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

    1.    KZKG ^ Gaara va dir

      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 😉

  3.   Charlie-Brown va dir

    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? ...

    1.    KZKG ^ Gaara va dir

      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

  4.   Adolfo va dir

    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.

  5.   Hugo va dir

    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/»

  6.   fe va dir

    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?