Wie führe ich einen Webserver-Leistungsbenchmark durch?

Kennen Sie die durchschnittliche Antwortzeit Ihrer Website? Wissen Sie, wie viele gleichzeitige Benutzer Ihre Website verarbeiten kann?

Lasttests sind für Webanwendungen unerlässlich, um die Website-Kapazität zu kennen. Wenn Sie den Webserver auswählen, sollten Sie als Erstes einen Belastungstest durchführen und sehen, welcher für Sie gut funktioniert.

Benchmarking kann Ihnen bei der Entscheidung helfen;

  • Welcher Webserver funktioniert am besten
  • Anzahl der Server, die Sie benötigen, um x Anfragen zu bedienen
  • Welche Konfiguration liefert die besten Ergebnisse
  • Welche Tech-Stacks performen besser
  • Wenn Ihre Website langsamer wird oder zusammenbricht

Es gibt mehrere Online-Tools, um einen Stresstest durchzuführen; Wenn Sie jedoch nach einer Inhouse-Lösung suchen oder nur die Leistung des Webservers messen möchten, können Sie ApacheBench und alternativ einige der unten aufgeführten Tools verwenden.

Ich habe Apache & Nginx-Webserver verwendet, auf denen gehostet wird DigitalOcean um es zu testen.

ApacheBench

ApacheBench (ab) ist ein Open-Source-Befehlszeilenprogramm, das mit jedem Webserver funktioniert. In diesem Beitrag werde ich erklären, wie man dieses kleine Programm installiert und den Lasttest durchführt, um die Ergebnisse zu vergleichen.

Apache

Lassen Sie uns ApacheBench mit einem yum-Befehl installieren.

yum install httpd-tools

Wenn Sie bereits httpd-tools haben, können Sie dies ignorieren.

Sehen wir uns nun an, wie es bei 5000 Anfragen mit einer Parallelität von 500 abschneidet.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
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 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[[email protected] ~]#

Wie Sie sehen können, hat Apache 373 Anfragen pro Sekunde verarbeitet, und es dauerte insgesamt 13,389 Sekunden, um die gesamten Anfragen zu bedienen.

  6 Beste ECAD-Software zum Entwerfen elektronischer Produkte

Jetzt wissen Sie, dass die Standardkonfiguration diese vielen Anforderungen erfüllen kann. Wenn Sie also Konfigurationsänderungen vornehmen, können Sie den Test erneut durchführen, um die Ergebnisse zu vergleichen und die beste auszuwählen.

Nginx

Lassen Sie uns den Test machen, was wir für Apache gemacht haben, damit Sie vergleichen können, welcher besser abschneidet.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
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 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[[email protected] ~]#

BEEINDRUCKEND!

Hast du das gesehen?

Nginx verarbeitete 6593 Anfragen pro Sekunde! Ein Gewinner.

Wenn Sie also nur zwei Webserver vergleichen, erhalten Sie eine Vorstellung davon, welchen Sie für Ihre Webanwendung auswählen sollten.

Der obige Test ist auf CentOS 6.8, 64 Bit. Sie können mehrere Kombinationen von Betriebssystem- und Webserverversionen ausprobieren, um optimale Ergebnisse zu erzielen.

Sie mögen ApacheBench aus welchen Gründen auch immer nicht? Keine Sorge, es gibt viele andere, die Sie zum Ausführen des HTTP-Ladens verwenden können.

BELAGERUNG

BELAGERUNG ist ein HTTP-Lasttest-Dienstprogramm, das von UNIX unterstützt wird. Sie können mehrere URLs in eine Textdatei einfügen, um Tests zu laden. Sie können Siege mit yum installieren.

# yum install siege

Lassen Sie uns den Test mit 500 gleichzeitigen Anfragen für 5 Sekunden ausführen.

[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[[email protected] ~]#

Um die Parameter aufzuschlüsseln.

  Der Bildschirm schaltet sich während eines Anrufs aufgrund eines defekten Näherungssensors nicht ein? Hier sind die Korrekturen

-q – um es ruhig auszuführen (keine Anforderungsdetails anzeigen)

-t – 5 Sekunden lang ausführen

-c – 500 gleichzeitige Anfragen

Wie Sie sehen können, beträgt die Verfügbarkeit 100 % und die Reaktionszeit 0,04 Sekunden. Sie können den Belastungstestparameter basierend auf Ihrem Ziel optimieren.

Ali

Ali ist ein relativ neues Lasttest-Tool zur Durchführung von Echtzeitanalysen. Es unterstützt die Installation mehrerer Plattformen, einschließlich Docker.

Führen Sie nach der Installation ali aus, um die Nutzungsdetails anzuzeigen.

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

Wie Sie oben sehen können, haben Sie die Möglichkeit, HTTP-Header, Testdauer, Ratenbegrenzung, Timeout und mehr zu senden. Ich habe einen schnellen Test mit wdzwdz Tools durchgeführt und so sieht die Ausgabe aus.

Der Bericht ist interaktiv und enthält detaillierte Latenzinformationen.

Gobench

Gobench ist in der Go-Sprache und einem einfachen Lasttest-Dienstprogramm geschrieben, um die Leistung des Webservers zu bewerten. Es unterstützt mehr als 20.000 gleichzeitige Benutzer, was ApacheBench nicht tut.

Apache JMeter

JMeter ist eines der beliebtesten Open-Source-Tools zur Messung der Leistung von Webanwendungen. JMeter ist eine Java-basierte Anwendung und nicht nur ein Webserver, sondern Sie können sie gegen PHP, Java verwenden. ASP.net, SOAP, REST usw.

  So erstellen Sie Gruppen in Snapchat

JMeter hat eine anständige, benutzerfreundliche GUI, und die neueste Version 3.0 erfordert Java 7 oder höher, um die Anwendung zu starten. Sie müssen JMeter ausprobieren, wenn Sie die Leistung der Webanwendung optimieren möchten.

arbeiten

arbeiten ist ein weiteres modernes Tool zur Leistungsmessung, um Ihren Webserver zu belasten und Ihnen Details zu Latenz, Anfrage pro Sekunde, Übertragung pro Sekunde usw. zu geben.

Mit wrk können Sie angeben, dass ein Lasttest mit einer Reihe von Threads ausgeführt werden soll.

Nehmen wir ein Beispiel für die Ausführung eines Tests für 5 Minuten mit 500 gleichzeitigen Benutzern mit 8 Threads.

wrk –t8 –c500 -d300s http://localhost

Autokanone

Inspiriert von der Arbeit, Autokanone ist in Node.js geschrieben. Sie können es programmgesteuert, über die API oder ein eigenständiges Dienstprogramm verwenden. Alles, was Sie brauchen, ist, dass NodeJS als Voraussetzung installiert ist.

Sie können eine Reihe von Verbindungen, Anfragen, Dauer, Arbeitern, Zeitüberschreitung und Verbindungsrate steuern und unzählige Optionen zum Benchmarken Ihrer Webanwendungen anbieten.

Curl-Loader

Curl-Loader ist in C geschrieben, um die Anwendungslast zu simulieren, und unterstützt SSL/TLS. Neben dem Webseitentest können Sie dieses Open-Source-Tool auch zum Laden auf FTP-Servern verwenden.

Sie können einen Testplan mit einer Mischung aus HTTP, HTTPS, FTP und FTPS in einer einzelnen Stapelkonfiguration erstellen.

httperf

Das httperf ist ein leistungsstarkes Tool, das sich auf Benchmarks auf Mikro- und Makroebene konzentriert. Es unterstützt die Protokolle HTTP/1.1 und SSL.

Wenn Sie die erwartete Anzahl gleichzeitiger Benutzer haben und testen möchten, ob Ihr Webserver eine Anzahl von Anfragen bedienen kann, können Sie den folgenden Befehl verwenden.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

Der obige Befehl testet mit 100 Anfragen pro Sekunde für 1000 HTTP-Anfragen.

Tsung

Tsung ist ein verteiltes Stresstest-Tool für mehrere Protokolle, um HTTP-, SOAP-, PostgreSQL-, LDAP-, XAMP- und MySQL-Server zu belasten. Es unterstützt HTTP/1.0, HTTP/1.1 und Cookies werden automatisch gehandhabt.

Das Generieren eines Berichts ist mit Tsung möglich.

Fazit

Ich hoffe, die oben genannten Benchmarking-Tools geben Ihnen eine Vorstellung von der Leistung Ihres Webservers und können entscheiden, was für Ihr Projekt am besten geeignet ist.

Als nächstes vergessen Sie nicht, die Leistung Ihrer Website zu überwachen.