Hvordan utfører jeg Web Server Performance Benchmark?

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.

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.

  Hvordan sette opp en FTP-server på Ubuntu med Webmin

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.

  Når du ikke bør ta RAW-bilder

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

  15 beste verktøy for å lage flotte presentasjoner på nettet

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.