Kjenner du nettstedets gjennomsnittlige responstid? Vet du hvor mange samtidige brukere nettstedet ditt kan håndtere?
Belastningstesting er avgjørende for at nettapplikasjoner skal vite nettsidens kapasitet. Hvis du skal velge webserver, så er en av de første tingene du vil gjøre å utføre belastningstesten og se hvilken som fungerer bra for deg.
Benchmarking kan hjelpe deg med å bestemme;
- Hvilken webserver fungerer best
- Antall servere du trenger for å betjene x antall forespørsler
- Hvilken konfigurasjon gir deg de beste resultatene
- Hvilke teknologistabler fungerer best
- Når nettstedet ditt vil fungere tregere eller sammenbrudd
Det finnes flere nettbaserte verktøy for å utføre en stresstest; Hvis du imidlertid leter etter en intern løsning eller bare ønsker å benchmarke nettserverytelsen, kan du bruke ApacheBench og alternativt noen av verktøyene nedenfor.
Jeg har brukt Apache & Nginx webserver som er vert på DigitalOcean å teste den.
Innholdsfortegnelse
Apachebenk
Apachebenk (ab) er et åpen kildekode-kommandolinjeprogram som fungerer med hvilken som helst webserver. I dette innlegget vil jeg forklare hvordan du installerer dette lille programmet og utfører belastningstesten for å benchmarke resultatene.
Apache
La oss få installert ApacheBench ved å bruke en yum-kommando.
yum install httpd-tools
Hvis du allerede har httpd-verktøy, kan du ignorere dette.
La oss nå se hvordan den fungerer for 5000 forespørsler 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 håndtert 373 forespørsler per sekund, og det tok totalt 13,389 sekunder å betjene de totale forespørslene.
Nå vet du at standardkonfigurasjonen kan betjene disse mange forespørslene, så når du gjør noen konfigurasjonsendringer, kan du gjøre testen på nytt for å sammenligne resultatene og velge den beste.
Nginx
La oss gjøre testen til det vi gjorde for Apache, slik at du kan sammenligne hvilken som gir best ytelse.
[[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åndterte 6593 forespørsler per sekund! En vinner.
Så du ser bare å sammenligne med to webservere, vil du få en ide om hvilken du skal velge for nettapplikasjonen din.
Testen ovenfor er på CentOS 6.8, 64 bit. Du kan prøve flere kombinasjoner av OS & Web Server-versjon for optimale resultater.
Liker du ikke ApacheBench uansett grunn? Ingen grunn til bekymring, det er mange andre du kan bruke til å utføre HTTP-last.
BELEIRING
BELEIRING er et HTTP-lasttestverktøy som støttes på UNIX. Du kan legge inn flere URL-er i en tekstfil for å laste tester mot. Du kan installere beleiring ved å bruke yum.
# yum install siege
La oss kjøre testen med 500 samtidige forespørsler 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] ~]#
For å bryte ned parametrene.
-q – for å kjøre den stille (viser ikke forespørselsdetaljer)
-t – løp i 5 sekunder
-c – 500 samtidige forespørsler
Så som du kan se, er tilgjengeligheten 100 % og responstiden er 0,04 sekunder. Du kan justere belastningstestparameteren basert på målet ditt.
Ali
Ali er et relativt nytt lasttestingsverktøy for å utføre sanntidsanalyse. Den støtter flere plattformer å installere, inkludert Docker.
Når den er installert, kjør ali for å se bruksdetaljene.
[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 muligheten til å sende HTTP-hoder, testvarighet, hastighetsgrense, tidsavbrudd og mer. Jeg gjorde en rask test på tipsbilk.net Tools og her ser utdataene ut.
Rapporten er interaktiv og gir detaljert latensinformasjon.
Gobench
Gobench er skrevet i Go-språket og enkelt lasttestingsverktøy for å måle ytelsen til webserveren. Den støtter mer enn 20 000 samtidige brukere som ApacheBench ikke gjør.
Apache JMeter
JMeter er et av de mest populære verktøyene med åpen kildekode for å måle ytelsen til nettapplikasjoner. JMeter er java-basert applikasjon og ikke bare en webserver, men du kan bruke den mot PHP, Java. ASP.net, SOAP, REST, etc.
JMeter fikk en grei brukergrensesnitt, og den nyeste versjonen 3.0 krever Java 7 eller høyere for å starte applikasjonen. Du må prøve JMeter hvis målet ditt er å optimere nettapplikasjonsytelsen.
wrk
wrk er et annet moderne verktøy for ytelsesmåling for å belaste webserveren din og gi deg latens, forespørsel per sekund, overføring per sekund, etc. detaljer.
Med wrk kan du spesifisere å kjøre en belastningstest med en rekke tråder.
La oss ta et eksempel på å kjøre en test i 5 minutter med 500 samtidige brukere med 8 tråder.
wrk –t8 –c500 -d300s http://localhost
Autokanon
Inspirert av jobb, autokanon er skrevet i Node.js. Du kan bruke det programmatisk, gjennom API eller frittstående verktøy. Alt du trenger er NodeJS installert som en forutsetning.
Du kan kontrollere en rekke tilkoblinger, forespørsler, varighet, arbeidere, tidsavbrudd, tilkoblingshastighet og tilby tonnevis av alternativer for å måle nettapplikasjonene dine.
Curl-loader
krøllelaster er skrevet i C for å simulere applikasjonsbelastning, og den støtter SSL/TLS. Sammen med nettsidetesten kan du også bruke dette åpen kildekodeverktøyet til å utføre belastning på FTP-servere.
Du kan lage en testplan med en blanding av HTTP, HTTPS, FTP og FTPS i en enkelt batch-konfigurasjon.
httperf
De httperf er et høyytelsesverktøy som fokuserer på mikro- og makronivå benchmarks. Den støtter HTTP/1.1 og SSL-protokoller.
Hvis du har det forventede antallet samtidige brukere og ønsker å teste om webserveren din kan betjene et antall av en forespørsel, kan du bruke følgende kommando.
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Kommandoen ovenfor vil teste med 100 forespørsler per sekund for 1000 HTTP-forespørsler.
Tsung
Tsung er et multi-protokoll distribuert stresstestingsverktøy for å stresse HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL server. Den støtter HTTP/1.0, HTTP/1.1, og informasjonskapsler håndteres automatisk.
Det er mulig å generere en rapport med Tsung.
Konklusjon
Jeg håper benchmarkingverktøyene ovenfor gir deg en idé om nettserverytelsen din og bestemmer hva som fungerer best for prosjektet ditt.
Deretter må du ikke glemme å overvåke ytelsen til nettstedet ditt.