Fehlgeschlagene Anfragen nach Länge in meinem ApacheBench-Lasttestergebnis

Lesezeit: 4 Minuten

Ich habe eine Website in PHP, Lighttpd. Es verwendet auch MySQL auf Centos 5. Ich habe mein PHP mit dem folgenden Code mit Apache Bench (ab) getestet. Dies führte zu einigen Fehlern (Fehlgeschlagene Anfragen), die auf eine andere Länge als normal hindeuteten. Ich bin mir absolut sicher, dass mein PHP-Ergebnis immer genau dieselbe Länge haben sollte. Ich habe meine Lighttpd- und MySQL-Protokolle und Fehlerprotokolle überprüft und habe dort keine Fehler.

Gibt es eine Möglichkeit, genau zu überprüfen, was ab bekommt, wenn das Ergebnis eine andere Länge hat, oder gibt es eine andere Möglichkeit, herauszufinden, was die Ursache ist oder was das “schlechte” Ergebnis ist?

Ich muss das wissen, weil ich 100% gute Ergebnisse haben muss.

-bash-3.2# ab -n 500 -c 200 http://domain.com/test/index.php
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking domain.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests


Server Software:        lighttpd/1.4.20
Server Hostname:        domain.com
Server Port:            80

Document Path:          /test/index.php
Document Length:        15673 bytes

Concurrency Level:      200
Time taken for tests:   0.375862 seconds
Complete requests:      500
Failed requests:        499
   (Connect: 0, Length: 499, Exceptions: 0)
Write errors:           0
Total transferred:      7920671 bytes
HTML transferred:       7837000 bytes
Requests per second:    1330.28 [#/sec] (mean)
Time per request:       150.345 [ms] (mean)
Time per request:       0.752 [ms] (mean, across all concurrent requests)
Transfer rate:          20579.36 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   10   9.4      6      30
Processing:     0  113 133.5     16     342
Waiting:        0  111 134.3     12     341
Total:          0  123 138.9     16     370

Percentage of the requests served within a certain time (ms)
  50%     16
  66%    235
  75%    289
  80%    298
  90%    331
  95%    345
  98%    365
  99%    368
 100%    370 (longest request)

Laufen ab mit dem -v 2 -Parameter, was Ausführlichkeitsstufe 2 bedeutet. Dadurch werden die Antwortheader ausgegeben. Wenn Ihre Anfragen keine Chunked-Codierung verwenden, sehen Sie einen „Content-Length“-Header, der die Größe jeder Antwort angibt.

gw:~$ ab -n 1 -v 2 "http://whatever.com/"

...

LOG: header received:
HTTP/1.0 200 OK
...
Content-Length: 1568399

Wenn Ihre Antworten Chunked Encoding verwenden, ist die Länge bis zum Ende der Übertragung nicht bekannt. Normalerweise wird Chunked Encoding nur für komprimierte Antworten verwendet, und ApacheBench führt standardmäßig keine Komprimierung durch.

Wenn es ist Komprimieren der Antworten aus irgendeinem Grund, der dies erklären könnte; die komprimierte Länge hängt vom Inhalt ab.

Sie können auch verwenden curl -i und die --compress Option zum Anzeigen der Antwortheader für eine einzelne Anfrage mit und ohne Komprimierung.

  • Kommentar eines anonymen Benutzers (Änderung abgelehnt): Notiz: ab erwartet, dass alle Antworten gleich groß sind. Wenn die Möglichkeit besteht, dass Ihre Ausgabe in der Größe variiert, sollten Sie “Fehlgeschlagene Anforderungen” ignorieren ab werden sie als gescheitert betrachten.

    – Anne

    12. Dezember 2011 um 22:14 Uhr


Verwenden Sie tcpdump

Öffnen Sie Qty 2 Terminal / Shell-Fenster oder verwenden Sie einfach den Bildschirm.

Verwenden Sie im ersten Fenster tcpdump, um Übertragungsdaten von/zu Ihrer Netzwerkkarte (eth0) in einer Datei zu erfassen:

sudo tcpdump -s 9999 -i eth0 -w myfile.txt

Feuern Sie im zweiten Fenster Ihren ab-Befehl ab:

ab -n 500 -c 200 http://domain.com/test/index.php

Wenn das alles erledigt ist, parsen Sie die Datei mit Strings und grep:

strings myfile2.txt | grep -C 3 "200 OK"

Sie sollten in der Lage sein, alle Datensegmente von dort aus zu überwachen, indem Sie die Ergebnisse beobachten oder abrufen.

  • Ich erhalte die Meldung „tcpdump: ioctl: No such device“, wenn ich sudo tcpdump versuche

    – Tom Smykowski

    3. Oktober 2009 um 8:32 Uhr

  • Ich habe getan, was Sie geschrieben haben, und dies sind die Ergebnisse: —

    HTTP/1.0 200 OK Verbindung: schließen X-Powered-By: PHP/5.2.6 Inhaltstyp: Text /html Wie soll ich dieses Ergebnis interpretieren?

    – Tom Smykowski

    3. Oktober 2009 um 17:21 Uhr

  • Tomaszs: Sie müssen die NIC-Gerätekennung für jedes *nix-Betriebssystem ändern, das Sie ausführen. en0 auf Mac, eth0 auf Linux usw. HTTP/1.0 200 OK bedeutet, dass der Webserver die angeforderte Ressource gefunden und den Inhalt zurückgegeben hat. Die Seite ist gelungen! Sie müssen nur den Inhalt von myfile2.txt lesen, um zu sehen, wo die Fehler ins Bild kommen.

    – zufälligx

    6. Oktober 2009 um 22:02 Uhr

  • Was macht der Strings-Befehl genau? Was ist der Unterschied zwischen grep direkt aus dem Verzeichnis der Datei?

    – cedricliang

    11. Januar 2016 um 9:38 Uhr

ab geht davon aus, dass alle Antworten gleich sind. Es betrachtet die Inhaltslänge der ersten Antwort und vergleicht dann andere damit.

Aus der Manpage:

Document Length
  This is the size in bytes of the first successfully returned document. 
  If the document length changes during  testing,  the  response  is 
  considered an error.

Wenn Ihre erste Anfrage also folgende Daten enthält:

{"hostname":"nodecellar-1-dwfxd","serverip":"10.1.3.3"}

Und das nächste ist:

{"hostname":"nodecellar-1-dwfxd","serverip":"10.1.3.30"}

ab schlägt mit einem Längenfehler fehl, da die Ausgabe ein Zeichen länger ist.

  • Mit können Sie die Längenprüfung ausschalten -l Möglichkeit.

    – Gogowitsch

    11. März um 11:51 Uhr

Dies ist ein Problem mit dynamischen Seiten, es passiert, weil die Content-Length Der HTTP-Header kann zwischen den Anforderungen variieren. Beim Benutzen ab Bei solchen Seiten müssen Sie die verwenden -l Möglichkeit.

-l              Accept variable document length (use this for dynamic pages)

1081600cookie-checkFehlgeschlagene Anfragen nach Länge in meinem ApacheBench-Lasttestergebnis

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy