it-swarm.com.de

ab last prüfung

Kann mir bitte jemand durch den Prozess gehen, wie ich meine Website mit Apache Bench Tool (ab) testen kann?

Ich möchte folgendes wissen:

Wie viele Personen pro Minute kann die Site verarbeiten?

Bitte führen Sie mich durch die Befehle, die ich ausführen sollte, um das herauszufinden. 

Ich habe jedes Tutorial ausprobiert und sie sind verwirrend.

159
jewelwast

Das Apache-Benchmark-Tool ist sehr einfach, und obwohl es Ihnen einen soliden Eindruck von der Leistung vermittelt , ist es keine gute Idee, sich nur darauf zu verlassen, wenn Sie vorhaben, Ihre Site ernsthaft zu belasten Stress in der Produktion.

Trotzdem sind hier die gebräuchlichsten und einfachsten Parameter:

-c: ("Nebenläufigkeit"). Gibt an, wie viele Clients (Personen/Benutzer) gleichzeitig auf die Website zugreifen. Während ab ausgeführt wird, werden -c Clients auf die Site zugreifen. Dies ist, was tatsächlich entscheidet, wie viel Stress Ihre Website während des Benchmarks erleidet.

-n: Gibt an, wie viele Anfragen gestellt werden sollen. Dies entscheidet nur über die Länge des Benchmarks. Ein hoher -n -Wert mit einem -c -Wert, den Ihr Server unterstützen kann, ist eine gute Idee, um sicherzustellen, dass unter anhaltendem Stress nichts kaputt geht: Es ist nicht dasselbe, 5 Sekunden lang Stress zu unterstützen als 5 Std.

-k: Dies erledigt die "KeepAlive" -Funktionsbrowser von Natur aus. Sie müssen für -k keinen Wert übergeben, da dieser "boolesch" ist (was bedeutet, dass Sie für Ihren Test den Keep Alive-Header von HTTP verwenden und die Verbindung aufrechterhalten möchten). Da Browser dies tun und Sie wahrscheinlich die Belastung und den Fluss Ihrer Website durch Browser simulieren möchten, wird empfohlen, einen Benchmark damit durchzuführen.

Das letzte Argument ist einfach der Host. Standardmäßig wird das http: // Protokoll aufgerufen, wenn Sie es nicht angeben.

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

Wenn Sie den obigen Befehl eingeben, drücken Sie http://example.com/ mit 350 gleichzeitigen Verbindungen, bis 20.000 Anforderungen erfüllt sind. Dies erfolgt über den Keepalive-Header.

Nachdem der Prozess die 20.000 Anfragen abgeschlossen hat, erhalten Sie eine Rückmeldung zu den Statistiken. Hier erfahren Sie, wie gut sich die Site unter der Belastung verhält, die Sie bei Verwendung der obigen Parameter ausgeübt haben.

Um herauszufinden, wie viele Personen die Site gleichzeitig verarbeiten kann, prüfen Sie, ob die Antwortzeiten (Mittelwerte, minimale und maximale Antwortzeiten, fehlgeschlagene Anforderungen usw.) Zahlen sind, die Ihre Site akzeptieren kann (verschiedene Sites möchten möglicherweise unterschiedliche Geschwindigkeiten). Sie können das Tool mit verschiedenen -c-Werten ausführen, bis Sie die Stelle erreichen, an der Sie sagen: "Wenn ich es erhöhe, werden fehlgeschlagene Anforderungen abgerufen, und es bricht ab.".

Abhängig von Ihrer Website erwarten Sie eine durchschnittliche Anzahl von Anfragen pro Minute. Dies ist so unterschiedlich, dass Sie dies mit ab nicht simulieren können. Bedenken Sie dies jedoch wie folgt: Wenn Ihr durchschnittlicher Benutzer 5 Anfragen pro Minute beantwortet und die durchschnittliche Antwortzeit, die Sie für gültig halten, 2 Sekunden beträgt, bedeutet dies, dass 10 Sekunden von einer Minute 1 Benutzer Anfragen erhalten, was nur bedeutet 1/6 der Zeit wird es die Seite treffen. Dies bedeutet auch, dass bei 6 Benutzern, die gleichzeitig mit ab auf die Website zugreifen, wahrscheinlich 36 Benutzer in der Simulation sind, obwohl Ihre Nebenläufigkeitsstufe (-c) nur 6 beträgt.

Dies hängt von dem Verhalten ab, das Sie von Ihren Benutzern erwarten, die die Site verwenden. Sie erhalten es jedoch von "Ich erwarte, dass mein Benutzer X Anfragen pro Minute beantwortet und ich halte eine durchschnittliche Antwortzeit für gültig, wenn sie 2 Sekunden beträgt". Dann ändern Sie einfach Ihr -c-Level, bis Sie 2 Sekunden durchschnittliche Antwortzeit erreicht haben (aber stellen Sie sicher, dass die maximale Antwortzeit und stddev noch gültig sind) und sehen Sie, wie groß Sie -c machen können.

Ich hoffe ich habe das klar erklärt :) Viel Glück

291
Mamsaac

Bitte führen Sie mich durch die Befehle, die ich ausführen sollte, um das herauszufinden.

Der einfachste Test, den Sie durchführen können, ist die Ausführung von 1000 Anfragen (jeweils 10) (dies simuliert ungefähr 10 gleichzeitige Benutzer, die jeweils 100 Seiten erhalten - über die Dauer des Tests).

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

-n 1000 ist die Anzahl der zu stellenden Anforderungen.

-c 10 weist AB an, anstelle von 1 Anfragen jeweils 10 Anforderungen gleichzeitig auszuführen, um gleichzeitige Besucher (im Vergleich zu aufeinander folgenden Besuchern) besser zu simulieren.

-k sendet den Header KeepAlive, der den Webserver auffordert, die Verbindung nach Abschluss jeder Anforderung nicht zu beenden, sondern sie weiterhin zu verwenden.

Ich sende auch den zusätzlichen Header Accept-Encoding: gzip, deflate, da Mod_deflate fast immer verwendet wird, um die Text-/HTML-Ausgabe um 25% -75% zu komprimieren. Die Auswirkungen sollten nicht aufgrund der Auswirkungen auf die Gesamtleistung des Webservers (z , kann 2x die Daten in der gleichen Zeit übertragen, usw.).

Ergebnisse:

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)

Ignorieren Sie für die einfachste Interpretation alles, ABER diese Zeile:

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

Multiplizieren Sie das mit 60, und Sie haben Ihre Anfragen pro Minute.

Um realistische Ergebnisse zu erhalten, sollten Sie Wordpress anstelle von statischen HTML- oder index.php -Dateien testen, da Sie wissen müssen, wie alles zusammen funktioniert. Dazu gehören komplexer PHP Code und mehrere MySQL-Abfragen ...

Hier sind zum Beispiel die Ergebnisse des Testens einer Neuinstallation von Wordpress auf demselben System und in derselben WAMP-Umgebung (ich verwende WampDeveloper, aber es gibt auch Xampp, WampServer und andere) ...

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

Das ist jetzt 37x langsamer!

Nach dem Auslastungstest können Sie eine Reihe von Maßnahmen zur Verbesserung der Gesamtleistung (Requests per Second) sowie zur Stabilisierung des Webservers bei höherer Auslastung (z. B. Erhöhung des -n und -c neigen zum Absturz von Apache) durchführen. , über das Sie hier lesen können:

Belastungstest Apache mit AB (Apache Bench)

61
rightstuff

Schritte zum Einrichten der Apache Bench (AB) unter Windows (IMO - Recommended).

Schritt 1 - Installieren Sie Xampp.
Schritt 2 - CMD öffnen.
Schritt 3 - Gehen Sie vom CMD zum Apache-Bankziel (cd C:\xampp\Apache\bin)
Schritt 4 - Füge den Befehl ein (ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Schritt 5 - Warten Sie darauf. Du bist fertig 

Das Laden der API mit nur ab reicht nicht aus. Ich denke jedoch, dass es ein großartiges Werkzeug ist, um Ihnen eine grundlegende Vorstellung davon zu geben, wie Ihre Website performant ist.

Wenn Sie den Befehl ab verwenden möchten, um mehrere API-Endpunkte mit unterschiedlichen Daten gleichzeitig im Hintergrund zu testen, müssen Sie den Befehl "Nohup" verwenden. Es führt jeden Befehl aus, auch wenn Sie das Terminal schließen.

Ich habe ein einfaches Skript geschrieben, das den gesamten Prozess automatisiert. Sie können es gerne verwenden: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-Shell -Skript

2
Ivan Kvasnica

Ich war auch neugierig, ob ich die Geschwindigkeit meines Skripts mit Apache abs oder einem PHP/PHP-Measureskript oder einer PHP-Erweiterung messen kann.

die letzten beiden sind für mich gescheitert: Sie sind ungefähr . Danach dachte ich, "ab" und "abs" zu versuchen.

der Befehl "ab -k -c 350 -n 20000 example.com/" ist schön, weil es einfacher ist!

aber hat jemand gedacht, "localhost" auf einem Apache-Server, zum Beispiel www.apachefriends.org?

sie sollten einen Ordner wie "bench" im Stammverzeichnis erstellen, in dem Sie zwei Dateien haben: test "bench.php" und Referenz "void.php".

und dann: Benchmark!

bench.php

<?php

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

void.php

<?php
?>

auf Ihrem Desktop sollten Sie eine .bat-Datei (in Windows) wie folgt verwenden:

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

Nun, wenn Sie genau aufpassen ...

das Void-Skript erzeugt keine Nullergebnisse !!! Die Schlussfolgerung lautet: Ab dem zweiten Ergebnis sollte das erste Ergebnis verringert werden !!!

hier habe ich:

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 das erwartete Ergebnis!

0
Constantin