test di carico ab


194

Qualcuno può guidarmi attraverso il processo di caricamento del test del mio sito Web utilizzando Apache Bench Tool ( ab)?

Voglio sapere quanto segue:

Quante persone al minuto può gestire il sito?

Per favore guidami attraverso i comandi che dovrei eseguire per capirlo.

Ho provato tutti i tutorial e sono confusi.

Risposte:


315

Lo strumento di benchmark di Apache è molto semplice e, sebbene possa darti un'idea concreta di alcune prestazioni, è una cattiva idea dipendere da esso solo se prevedi di esporre il tuo sito a gravi stress nella produzione.

Detto questo, ecco i parametri più comuni e più semplici:

-c: ("Concorrenza"). Indica quanti clienti (persone / utenti) colpiranno il sito contemporaneamente. Durante l' abesecuzione, ci saranno -cclient che colpiscono il sito. Questo è ciò che decide effettivamente la quantità di stress che il tuo sito subirà durante il benchmark.

-n: Indica quante richieste verranno fatte. Questo decide solo la lunghezza del benchmark. Un -nvalore elevato con un -cvalore che il tuo server può supportare è una buona idea per garantire che le cose non si rompano in condizioni di stress prolungato: non è lo stesso supportare lo stress per 5 secondi che per 5 ore.

-k: Questo fa per natura i browser di funzionalità "KeepAlive". Non è necessario passare un valore -kperché "booleano" (significato: indica che si desidera che il test utilizzi l'intestazione Keep Alive da HTTP e sostenga la connessione). Poiché i browser lo fanno e probabilmente vorrai simulare lo stress e il flusso che il tuo sito avrà dai browser, ti consigliamo di fare un benchmark con questo.

L'argomento finale è semplicemente l'host. Per impostazione predefinita, verrà colpito il protocollo http: // se non lo si specifica.

ab -k -c 350 -n 20000 example.com/

Emettendo il comando sopra, premi http://example.com/ con 350 connessioni simultanee fino a quando non vengono soddisfatte 20 mila richieste. Sarà fatto usando l'intestazione keep alive.

Dopo che il processo avrà terminato le 20 mila richieste, riceverai un feedback sulle statistiche. Questo ti dirà quanto bene il sito ha funzionato sotto lo stress che hai messo quando usi i parametri sopra.

Per scoprire quante persone il sito può gestire contemporaneamente, basta vedere se i tempi di risposta (mezzi, tempi di risposta minimo e massimo, richieste non riuscite, ecc.) Sono numeri che il tuo sito può accettare (siti diversi potrebbero desiderare velocità diverse). Puoi eseguire lo strumento con valori -c diversi finché non raggiungi il punto in cui dici "Se lo aumento, inizia a ricevere richieste non riuscite e si interrompe".

A seconda del sito Web, ci si aspetta un numero medio di richieste al minuto. Questo varia così tanto che non sarai in grado di simularlo con ab. Tuttavia, pensaci in questo modo: se l'utente medio risponderà a 5 richieste al minuto e il tempo medio di risposta che ritieni valido è di 2 secondi, ciò significa che 10 secondi su un minuto 1 utente sarà su richieste, il che significa solo 1/6 del tempo colpirà il sito. Questo significa anche che se hai 6 utenti che colpiscono il sito contemporaneamente con ab, è probabile che tu abbia 36 utenti in simulazione, anche se il tuo livello di concorrenza (-c) è solo 6.

Questo dipende dal comportamento che ti aspetti dai tuoi utenti utilizzando il sito, ma puoi ottenerlo da "Mi aspetto che il mio utente risponda a X richieste al minuto e considero un tempo di risposta medio valido se è di 2 secondi". Quindi modifica il tuo livello -c fino a raggiungere 2 secondi di tempo medio di risposta (ma assicurati che il tempo di risposta massimo e stddev siano ancora validi) e vedi quanto puoi guadagnare -c.

Spero di averlo spiegato chiaramente :) Buona fortuna


5
Risposta chiara e chiara! Potresti spiegare un po 'di più sul perché hai ottenuto questo "Questo significa anche che se hai 6 utenti che colpiscono il sito con ab contemporaneamente, è probabile che tu abbia 36 utenti in simulazione, anche se il tuo livello di concorrenza (-c) è solo 6."
kbariotis,

3
Solo un promemoria, probabilmente si desidera aggiungere l' -lopzione se la pagina ha contenuti dinamici, in questo modo non si ottiene un sacco di richieste non riuscite a causa della lunghezza del contenuto diversa tra le richieste.
JCM,

73

Per favore guidami attraverso i comandi che dovrei eseguire per capirlo.

Il test più semplice che puoi fare è eseguire 1000 richieste, 10 alla volta (che simula approssimativamente 10 utenti simultanei che ottengono 100 pagine ciascuno - per tutta la durata del test).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 è il numero di richieste da effettuare.

-c 10 dice ad AB di fare 10 richieste alla volta, anziché 1 richiesta alla volta, per simulare meglio i visitatori simultanei (rispetto ai visitatori sequenziali).

-kinvia l' KeepAliveintestazione, che chiede al server Web di non chiudere la connessione dopo ogni richiesta, ma di continuare a riutilizzarla.

Sto anche inviando l'intestazione aggiuntiva Accept-Encoding: gzip, deflateperché mod_deflate è quasi sempre utilizzato per comprimere l'output text / html 25% -75%, i cui effetti non devono essere ignorati a causa del suo impatto sulle prestazioni complessive del server Web (ad esempio, può trasferire il doppio dei dati nello stesso lasso di tempo, ecc.).

risultati:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Per l'interpretazione più semplice, ignora tutto MA questa linea:

Requests per second:    704.23 [#/sec] (mean)

Moltiplicalo per 60 e avrai le tue richieste al minuto.

Per ottenere risultati dal mondo reale, ti consigliamo di testare Wordpress invece di alcuni file HTML o index.php statici perché devi sapere come tutto funziona insieme: incluso il codice PHP complesso e più query MySQL ...

Ad esempio, ecco i risultati del test di una nuova installazione di Wordpress sullo stesso sistema e ambiente WAMP (sto usando WampDeveloper, ma ci sono anche Xampp, WampServer e altri) ...

Requests per second:    18.68 [#/sec] (mean)

Ora è 37 volte più lento!

Dopo il test di carico, ci sono una serie di cose che puoi fare per migliorare le prestazioni complessive (Richieste al secondo) e anche rendere il web server più stabile sotto carico maggiore (ad esempio, aumentando -ne -ctende ad arrestare Apache), che puoi leggere qui:

Test di carico Apache con AB (Apache Bench)


9

Passaggi per configurare Apache Bench (AB) su Windows (IMO - Consigliato).

Passaggio 1: installare Xampp.
Passaggio 2: aprire CMD.
Passaggio 3: vai alla destinazione del banco apache ( cd C:\xampp\apache\bin) da CMD
Passaggio 4: incolla il comando ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Passaggio 5: attendi. Fatto


Non funziona ... Ricevo questo errore: Benchmarking localhost (sii paziente) ... apr_socket_recv: Connessione rifiutata (111)
Vijaysinh Parmar

sostituisci localhost con 127.0.0.1
akshaynagpal il

3

Ero anche curioso di sapere se posso misurare la velocità del mio script con apache abs o costruire / distruggere script di misura php o un'estensione php.

gli ultimi due hanno fallito per me: sono approssimativi. dopo di che ho pensato di provare "ab" e "abs".

il comando "ab -k -c 350 -n 20000 example.com/" è bellissimo perché è tutto più semplice!

ma qualcuno ha pensato di "localhost" su qualsiasi server Apache, ad esempio www.apachefriends.org?

dovresti creare una cartella come "bench" in root dove hai 2 file: test "bench.php" e riferimento "void.php".

e poi: confrontalo!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

sul desktop dovresti usare un file .bat (in Windows) come questo:

bench.bat

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Ora se presti molta attenzione ...

lo script vuoto non produce risultati zero !!! Quindi la conclusione è: dal secondo risultato il primo risultato dovrebbe essere diminuito !!!

qui ho ottenuto:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 il risultato mi aspetto!


2

Caricare il test dell'API utilizzando solo ab non è sufficiente. Tuttavia, penso che sia un ottimo strumento per darti un'idea di base su come il tuo sito è performante.

Se si desidera utilizzare il comando ab per testare più endpoint API, con dati diversi, tutti contemporaneamente in background, è necessario utilizzare il comando "nohup". Esegue qualsiasi comando anche quando si chiude il terminale.

Ho scritto un semplice script che automatizza l'intero processo, sentitevi liberi di usarlo: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.