Vet du din webbplatss genomsnittliga svarstid? Vet du hur många samtidiga användare din webbplats kan hantera?
Belastningstestning är avgörande för att webbapplikationer ska känna till webbplatsens kapacitet. Om du ska välja webbserver så är en av de första sakerna du vill göra att utföra belastningstesten och se vilken som fungerar bra för dig.
Benchmarking kan hjälpa dig att bestämma;
- Vilken webbserver fungerar bäst
- Antal servrar du behöver för att betjäna x antal förfrågningar
- Vilken konfiguration ger dig bäst resultat
- Vilka tekniska stackar presterar bättre
- När din webbplats kommer att fungera långsammare eller nedbrytning
Det finns flera onlineverktyg för att utföra ett stresstest; men om du letar efter en intern lösning eller vill jämföra bara webbserverns prestanda, kan du använda ApacheBench och alternativt några av verktygen nedan.
Jag har använt Apache & Nginx webbserver som är värd DigitalOcean att testa det.
Innehållsförteckning
ApacheBench
ApacheBench (ab) är ett kommandoradsprogram med öppen källkod som fungerar med vilken webbserver som helst. I det här inlägget kommer jag att förklara hur man installerar det här lilla programmet och utför belastningstestet för att jämföra resultaten.
Apache
Låt oss installera ApacheBench genom att använda ett yum-kommando.
yum install httpd-tools
Om du redan har httpd-tools kan du ignorera detta.
Låt oss nu se hur det fungerar för 5000 förfrågningar med en samtidighet på 500.
[[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] ~]#
Så som du kan se har Apache hanterat 373 förfrågningar per sekund, och det tog totalt 13,389 sekunder att betjäna de totala förfrågningarna.
Nu vet du att standardkonfigurationen kan tjäna dessa många förfrågningar så när du gör några konfigurationsändringar kan du göra testet igen för att jämföra resultaten och välja den bästa.
Nginx
Låt oss göra testet vad vi gjorde för Apache så att du kan jämföra vilken som presterar bättre.
[[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] ~]#
WOW!
Såg du att?
Nginx hanterade 6593 förfrågningar per sekund! En vinnare.
Så du ser bara om du jämför med två webbservrar får du en idé om vilken du ska välja för din webbapplikation.
Ovanstående test är på CentOS 6.8, 64 bit. Du kan prova flera kombinationer av OS & Web Server-version för optimala resultat.
Gillar du inte ApacheBench av någon anledning? Inga bekymmer, det finns många andra du kan använda för att utföra HTTP-laddning.
BELÄGRING
BELÄGRING är ett HTTP-lasttestverktyg som stöds på UNIX. Du kan lägga in flera URL:er i en textfil för att ladda tester mot. Du kan installera belägring med yum.
# yum install siege
Låt oss köra testet med 500 samtidiga förfrågningar i 5 sekunder.
[[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] ~]#
För att bryta ner parametrarna.
-q – för att köra det tyst (visar inte förfrågningsdetaljer)
-t – kör i 5 sekunder
-c – 500 samtidiga förfrågningar
Så som du kan se är tillgängligheten 100% och svarstiden är 0,04 sekunder. Du kan justera belastningstestparametern baserat på ditt mål.
Ali
Ali är ett relativt nytt lasttestverktyg för att utföra realtidsanalyser. Den stöder flera plattformar att installera, inklusive Docker.
När det är installerat, kör ali för att se användningsdetaljerna.
[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]:~#
Som du kan se ovan har du ett alternativ att skicka HTTP-rubriker, testlängd, hastighetsgräns, timeout och mer. Jag gjorde ett snabbt test på adminvista.com Tools och här ser resultatet ut.
Rapporten är interaktiv och ger detaljerad latensinformation.
Gobänk
Gobänk är skrivet på Go-språket och ett enkelt lasttestverktyg för att jämföra webbserverns prestanda. Den stöder mer än 20 000 samtidiga användare vilket ApacheBench inte gör.
Apache JMeter
JMeter är ett av de mest populära verktygen med öppen källkod för att mäta webbapplikationers prestanda. JMeter är Java-baserad applikation och inte bara en webbserver, utan du kan använda den mot PHP, Java. ASP.net, SOAP, REST, etc.
JMeter fick ett anständigt vänligt GUI, och den senaste versionen 3.0 kräver Java 7 eller högre för att starta applikationen. Du måste prova JMeter om ditt mål är att optimera webbapplikationens prestanda.
wrk
wrk är ett annat modernt verktyg för prestandamätning för att belasta din webbserver och ge dig latens, begäran per sekund, överföring per sekund, etc. detaljer.
Med wrk kan du ange att köra ett belastningstest med ett antal trådar.
Låt oss ta ett exempel på att köra ett test i 5 minuter med 500 samtidiga användare med 8 trådar.
wrk –t8 –c500 -d300s http://localhost
Autokanon
Inspirerad av jobbet, autokanon är skrivet i Node.js. Du kan använda det programmatiskt, via API eller fristående verktyg. Allt du behöver är NodeJS installerat som en förutsättning.
Du kan kontrollera ett antal anslutningar, förfrågningar, varaktighet, arbetare, timeout, anslutningshastighet och erbjuda massor av alternativ för att benchmarka dina webbapplikationer.
Curl-loader
curl-loader skrivs i C för att simulera applikationsbelastning, och den stöder SSL/TLS. Tillsammans med webbsidestestet kan du också använda detta open source-verktyg för att utföra belastning på FTP-servrar.
Du kan skapa en testplan med en blandning av HTTP, HTTPS, FTP och FTPS i en enda batchkonfiguration.
httperf
De httperf är ett högpresterande verktyg som fokuserar på riktmärken på mikro- och makronivå. Den stöder HTTP/1.1- och SSL-protokoll.
Om du har det förväntade antalet samtidiga användare och vill testa om din webbserver kan betjäna ett antal av en begäran, kan du använda följande kommando.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Ovanstående kommando kommer att testa med 100 förfrågningar per sekund för 1000 HTTP-förfrågningar.
Tsung
Tsung är ett multi-protokoll distribuerat stresstestverktyg för att stressa HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL-server. Den stöder HTTP/1.0, HTTP/1.1 och cookies hanteras automatiskt.
Det är möjligt att skapa en rapport med Tsung.
Slutsats
Jag hoppas att ovanstående benchmarkingverktyg ger dig en uppfattning om din webbserverprestanda och bestämmer vad som fungerar bäst för ditt projekt.
Därefter, glöm inte att övervaka din webbplats prestanda.