Kender du din hjemmesides gennemsnitlige svartid? Ved du, hvor mange samtidige brugere dit websted kan håndtere?
Belastningstest er afgørende for, at webapplikationer kan kende webstedets kapacitet. Hvis du skal vælge webserveren, så er en af de første ting, du vil gøre, at udføre belastningstesten og se, hvilken der fungerer godt for dig.
Benchmarking kan hjælpe dig med at beslutte;
- Hvilken webserver fungerer bedst
- Antal servere du skal bruge for at betjene x antal anmodninger
- Hvilken konfiguration giver dig de bedste resultater
- Hvilke teknologiske stakke klarer sig bedre
- Når dit websted vil fungere langsommere eller nedbrydes
Der er flere online værktøjer til at udføre en stresstest; men hvis du leder efter en in-house løsning eller ønsker at benchmarke kun webserverens ydeevne, så kan du bruge ApacheBench og alternativt nogle af de nedenstående værktøjer.
Jeg har brugt Apache & Nginx webserver hostet på DigitalOcean at teste det.
Indholdsfortegnelse
ApacheBench
ApacheBench (ab) er et open source kommandolinjeprogram, der fungerer med enhver webserver. I dette indlæg vil jeg forklare, hvordan du installerer dette lille program og udfører belastningstesten for at benchmarke resultaterne.
Apache
Lad os få ApacheBench installeret ved at bruge en yum-kommando.
yum install httpd-tools
Hvis du allerede har httpd-værktøjer, kan du ignorere dette.
Lad os nu se, hvordan den klarer sig for 5000 anmodninger med en samtidighed 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 håndteret 373 anmodninger i sekundet, og det tog i alt 13.389 sekunder at betjene de samlede anmodninger.
Nu ved du, at standardkonfigurationen kan betjene disse mange anmodninger, så når du foretager konfigurationsændringer, kan du udføre testen igen for at sammenligne resultaterne og vælge den bedste.
Nginx
Lad os gøre testen til, hvad vi gjorde for Apache, så du kan sammenligne, hvilken der klarer sig bedst.
[[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å du det?
Nginx håndterede 6593 anmodninger i sekundet! En vinder.
Så du ser bare ved at sammenligne med to webservere, får du en idé om, hvilken du skal vælge til din webapplikation.
Ovenstående test er på CentOS 6.8, 64 bit. Du kan prøve flere kombinationer af OS & Web Server-version for de optimale resultater.
Kan du ikke lide ApacheBench af en eller anden grund? Ingen bekymringer, der er masser af andre, du kan bruge til at udføre HTTP-indlæsning.
BELEIRING
BELEIRING er et HTTP-belastningstestværktøj, der understøttes på UNIX. Du kan indsætte flere URL’er i en tekstfil for at indlæse tests mod. Du kan installere belejring ved hjælp af yum.
# yum install siege
Lad os køre testen med 500 samtidige anmodninger 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] ~]#
At nedbryde parametrene.
-q – for at køre det stille og roligt (viser ikke anmodningsdetaljer)
-t – kør i 5 sekunder
-c – 500 samtidige anmodninger
Så som du kan se, er tilgængeligheden 100%, og responstiden er 0,04 sekunder. Du kan justere belastningstestparameteren baseret på dit mål.
Ali
Ali er et relativt nyt belastningstestværktøj til at udføre realtidsanalyse. Det understøtter flere platforme at installere, inklusive Docker.
Når det er installeret, skal du udføre ali for at se brugsdetaljerne.
[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 ovenfor, har du mulighed for at sende HTTP-headere, testvarighed, hastighedsgrænse, timeout og mere. Jeg lavede en hurtig test på toadmin.dk Tools, og her ser outputtet ud.
Rapporten er interaktiv og giver detaljerede latensoplysninger.
Gobench
Gobench er skrevet i Go-sprog og et simpelt belastningstestværktøj til at benchmarke webserverens ydeevne. Det understøtter mere end 20.000 samtidige brugere, hvilket ApacheBench ikke gør.
Apache JMeter
JMeter er et af de mest populære open source-værktøjer til at måle webapplikations ydeevne. JMeter er java baseret applikation og ikke kun en webserver, men du kan bruge den mod PHP, Java. ASP.net, SOAP, REST osv.
JMeter fik en anstændig venlig GUI, og den seneste version 3.0 kræver Java 7 eller højere for at starte applikationen. Du skal prøve JMeter, hvis dit mål er at optimere webapplikationens ydeevne.
wrk
wrk er et andet moderne præstationsmålingsværktøj til at belaste din webserver og give dig latency, request per second, transfer per second, etc. detaljer.
Med wrk kan du specificere at køre en belastningstest med et antal gevind.
Lad os tage et eksempel på at køre en test i 5 minutter med 500 samtidige brugere med 8 tråde.
wrk –t8 –c500 -d300s http://localhost
Autokanon
Inspireret af arbejdet, autokanon er skrevet i Node.js. Du kan bruge det programmatisk gennem API eller et selvstændigt hjælpeprogram. Alt du behøver er NodeJS installeret som en forudsætning.
Du kan kontrollere en række forbindelser, anmodninger, varighed, arbejdere, timeout, forbindelseshastighed og tilbyde tonsvis af muligheder for at benchmarke dine webapplikationer.
Krøllelader
krølle-loader er skrevet i C for at simulere applikationsbelastning, og den understøtter SSL/TLS. Sammen med websidetesten kan du også bruge dette open source-værktøj til at udføre belastning på FTP-servere.
Du kan oprette en testplan med en blanding af HTTP, HTTPS, FTP og FTPS i en enkelt batch-konfiguration.
httperf
Det httperf er et højtydende værktøj, der fokuserer på benchmarks på mikro- og makroniveau. Det understøtter HTTP/1.1- og SSL-protokoller.
Hvis du har det forventede antal samtidige brugere og ønsker at teste, om din webserver kan betjene et antal af en anmodning, kan du bruge følgende kommando.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Ovenstående kommando vil teste med 100 anmodninger i sekundet for 1000 HTTP-anmodninger.
Tsung
Tsung er et multi-protokol distribueret stresstestværktøj til at stresse HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL server. Den understøtter HTTP/1.0, HTTP/1.1, og cookies håndteres automatisk.
Det er muligt at generere en rapport med Tsung.
Konklusion
Jeg håber, at ovenstående benchmarking-værktøjer giver dig en idé om din webservers ydeevne og beslutter, hvad der fungerer bedst for dit projekt.
Dernæst, glem ikke at overvåge dit websteds ydeevne.