Cum se măsoară performața serverului Web

De aproape o săptămână un articol de pe blog primește zilnic câteva mii de vizite provenite de pe site-ul unei televiziuni locale. E vorba de un „trafic spike” a cărui final sper să nu vină prea curând.

spike trafic

E plăcut să văd că CDN-ul își face bine treaba, că și plugin-ul implementat pentru a activa servirea imaginilor de pe CDN sub trafic intens își face treaba, dar mai plăcut e să văd cum numărul de abonați crește cum n-a mai făcut-o până acum. Creșterea care nu-mi place e cea înregistrată de factura CDN-ului, dar reprezintă ultima mea grijă având în vedere beneficiile pe care mi le aduce.

Per total, cea mai mare bucurie a mea, cea care contează, e că n-am fost luat pe nepregătite, iar acest lucru se datorează în mare parte ajustărilor făcute ca urmare a celei mai mari probleme cu care m-am confruntat de când am blogul —apropo, remediată ținând cont de faptul că avertismentul cu pricina nu l-am mai văzut de mai bine de zece zile.

Cu mai multe detalii voi reveni după ce minunea se încheie, dar de moment haideți să ne întoarcem la măsurarea performanței serverului Web, ca să fim pregătiți pentru astfel de situații.

Măsurarea performanței serverului Web


Instrumente de măsurare a performanței sunt multe, dar primele la care ar trebui să apelăm sunt Siege și Apache Benchmark. În ceea ce mă privește prefer Siege, dar îl prefer fiindcă l-am folosit de atâtea ori încât am memorat comenzile.

Măsurarea performanței serverului Web folosind Siege

Instalarea în Debian se face executând următoarea comandă:

apt-get install siege

Iar testul se pornește utilizând comanda aceasta:

siege --concurrent=XX --reps=YY https://www.adresa-site-web.com

Unde XX reprezintă numărul de conexiuni concomitente, iar YY numărul total al acestora.

De exemplu, dacă dorim să vedem cum se comportă serverul Web al cristianls.ro la 100 de solicitări, dintre care 50 concomitente, comanda va fi următoarea:

siege --concurrent=50 --reps=100 https://cristianls.ro

După finalizarea testului vom primi rezultatele acestuia:

teste performanta vps cristianls.ro

Dacă vrem efectuarea unui test mai complex, pentru a evita activarea scuturilor care ne protejează serverul de atacuri DDoS, cel mai indicat ar fi să creăm o listă cu adrese URL diferite ale aceluiași site spre care să fie direcționate cererile, de preferat una formată din cel puțin 50 de astfel de adrese dacă nu avem interesul în testarea unora anume, generată folosind nano:

nano adrese.txt

Lipim în aceasta adresele pentru testare, salvăm documentul cu Ctrl+O, ieșim din nano cu Ctrl+X și efectuăm testul pe baza listei:

siege --concurrent=50 --reps=100 -f adrese.txt

Rezultatul acestui tip de test este similar celui dirijat adresei principale a site-ului, dar se referă strict la date înregistrate pentru adresele analizate:

performante server folosind lista

Avantajul e că putem testa în acest mod, de exemplu, cele mai accesate 3 sau 4 pagini ale site-ului.

Măsurarea performanței serverului Web folosind Apache Benchmark

Folosesc Apache Benchmark doar atunci când am nevoie de grafice. Presupun că se pot obține grafice și cu Siege, dar mi-a fost lene să mă interesez. Pentru a genera un grafic bazat pe datele înregistrate de testul de performanță, pe lângă Apache Benchmark vom avea nevoie și de GNUPlot, așadar le vom instala împreună.

apt-get install apache2 gnuplot

Un test de performanță similar celui efectuat cu Siege îl putem realiza folosind următoarea comandă:

ab -g test.csv -n 100 -c 50 https://cristianls.ro/

Iar acesta va fi răspunsul primit:

test performanta cu Apache Benchmark

test performanta cu Apache Benchmark 2

Dacă dorim generarea unui grafic pe baza rezultatelor testului de performanță va trebui să creăm un fișier care să-i indice GNUPlot ce anume dorim să includă graficul.

De exemplu, pentru obținerea unui grafic similar acestuia:

test performanta

Vom crea fișierul plot.p executând comanda:

nano plot.p

Conținutul acestui fișier va fi:

set terminal png size 645
set output "test_performanta.png"
set title "100 de solicitari, 20 concomitente"
set size ratio 0.6
set grid y
set xlabel "solicitari"
set ylabel "timp de raspuns (ms)"
plot "test.csv" using 9 smooth sbezier with lines title "cristianls.ro"

Apoi solicitați generarea graficului executând comanda:

gnuplot plot.p

Evident, înlocuiți în script cristianls.ro cu numele site-ului testat.

Chiar dacă e evident o spun pentru a mă asigura că a înțeles toată lumea despre ce este vorba.

La nimic nu vă va folosi un test efectuat cu 50 de clienți simultan atunci când aveți un spike de 1000, dar pentru asta jucați-vă cu valorile din comenzi. E important să faceți acest lucru într-un moment de trafic redus, de exemplu atunci când este noapte în regiunea din care vă provin cele mai multe vizite, și e posibil să fie necesară dezactivarea scuturilor.

Faci un comentariu sau dai un răspuns?

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.