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.
Inhaltsverzeichnis
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.
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.
-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.
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.