Hvordan udføres webserverens ydeevne benchmark?

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.

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.

  8 API-tilknyttede programmer Udviklere kan deltage for at tjene penge

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.

  Sådan slukker du for en iPad Pro

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

  Hvad er RAT Malware, og hvorfor er det så farligt?

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.