Hogyan kell végrehajtani a webszerver teljesítmény-összehasonlítását?

Ismeri webhelye átlagos válaszidejét? Tudja, hogy webhelye hány egyidejű felhasználót képes kezelni?

A terhelési tesztelés elengedhetetlen ahhoz, hogy a webalkalmazások ismerjék a webhely kapacitását. Ha a webszervert választja, akkor az egyik első dolog, amit tennie kell, a terhelési teszt elvégzése, és megnézni, melyik működik jól az Ön számára.

A benchmarking segíthet a döntésben;

  • Melyik webszerver működik a legjobban
  • A kiszolgáláshoz szükséges szerverek száma x számú kérés
  • Melyik konfiguráció adja a legjobb eredményt
  • Melyik technológiai stack teljesít jobban
  • Amikor webhelye lassabban fog működni vagy meghibásodik

Számos online eszköz létezik a stresszteszt elvégzésére; Ha azonban házon belüli megoldást keres, vagy csak a webszerver teljesítményét szeretné összehasonlítani, akkor használhatja az ApacheBench-et és az alább felsorolt ​​eszközök némelyikét.

Használtam az Apache és Nginx webszervert, amelyen található DigitalOcean tesztelni.

ApacheBench

ApacheBench (ab) egy nyílt forráskódú parancssori program, amely bármely webszerverrel működik. Ebben a bejegyzésben elmagyarázom, hogyan kell telepíteni ezt a kis programot, és elvégezni a terhelési tesztet az eredmények összehasonlításához.

Apache

Telepítsük az ApacheBench-et egy yum paranccsal.

yum install httpd-tools

Ha már rendelkezik httpd-tools-szal, akkor ezt figyelmen kívül hagyhatja.

Most pedig nézzük meg, hogyan teljesít 5000 kérés esetén 500 egyidejűséggel.

[[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] ~]#

Amint látható, az Apache másodpercenként 373 kérést kezelt, és összesen 13,389 másodpercbe telt az összes kérés kiszolgálása.

  Hogyan jelöljünk meg egy dokumentumot véglegesnek az MS Wordben

Most már tudja, hogy az alapértelmezett konfiguráció ki tudja szolgálni ezt a sok kérést, így ha bármilyen konfigurációt módosít, megismételheti a tesztet az eredmények összehasonlításához, és kiválaszthatja a legjobbat.

Nginx

Tegyük olyannak a tesztet, amit az Apache-nál tettünk, hogy összehasonlíthassa, melyik teljesít jobban.

[[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] ~]#

AZTA!

Láttad azt?

Az Nginx 6593 kérést kezelt másodpercenként! Egy győztes.

Tehát csak két webszerver összehasonlításával kap egy ötletet, hogy melyiket válassza webalkalmazásához.

A fenti teszt CentOS 6.8, 64 bites verzión van. Az optimális eredmény érdekében kipróbálhatja az operációs rendszer és a webszerver verzió több kombinációját is.

Valamiért nem szereted az ApacheBench-et? Ne aggódj, rengeteg más eszköz is használható a HTTP-betöltés végrehajtására.

OSTROM

OSTROM egy UNIX-on támogatott HTTP-terhelési teszt segédprogram. Több URL-t is elhelyezhet egy szövegfájlban, amellyel ellenőrzi a teszteket. Telepítheti az ostromot a yum használatával.

# yum install siege

Futtassuk a tesztet 500 egyidejű kéréssel 5 másodpercig.

[[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] ~]#

A paraméterek lebontására.

  A sorban álló letöltések javítása Androidon

-q – csendes futtatása (nem jeleníti meg a kérés részleteit)

-t – fut 5 másodpercig

-c – 500 egyidejű kérés

Tehát amint látja, a rendelkezésre állás 100%, a válaszidő pedig 0,04 másodperc. Célja alapján módosíthatja a terhelési teszt paraméterét.

Ali

Ali egy viszonylag új terheléstesztelő eszköz valós idejű elemzés elvégzésére. Több platformot támogat a telepítéshez, beleértve a Dockert is.

A telepítés után futtassa az ali parancsot a használati részletek megtekintéséhez.

[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]:~#

Mint fentebb látható, lehetősége van HTTP-fejlécek, teszt időtartama, sebességkorlátozás, időtúllépés és egyebek küldésére. Csináltam egy gyors tesztet a etoppc.com Tools-on, és így néz ki a kimenet.

  Hogyan készítsünk kézzel írott jegyzeteket iPaden az Apple Pencil segítségével

A jelentés interaktív, és részletes késleltetési információkat tartalmaz.

Gobench

Gobench Go nyelven íródott, és egyszerű terheléstesztelő segédprogramot használ a webszerver teljesítményének összehasonlításához. Több mint 20 000 egyidejű felhasználót támogat, amit az ApacheBench nem.

Apache JMeter

JMeter az egyik legnépszerűbb nyílt forráskódú eszköz a webalkalmazások teljesítményének mérésére. A JMeter egy java alapú alkalmazás, és nem csak webszerver, hanem PHP, Java ellen is használható. ASP.net, SZAPPAN, REST stb.

A JMeter tisztességes, barátságos grafikus felhasználói felületet kapott, és a legújabb 3.0-s verzió Java 7 vagy újabb verziót igényel az alkalmazás elindításához. Ha a webalkalmazás teljesítményének optimalizálása a cél, meg kell próbálnia a JMetert.

wrk

wrk egy másik modern teljesítménymérő eszköz, amellyel megterhelheti a webszervert, és megadhatja a várakozási időt, a másodpercenkénti kérést, a másodpercenkénti átvitelt stb.

A wrk segítségével megadhatja, hogy terhelési tesztet futtasson több szálon.

Vegyünk egy példát egy teszt futtatására 5 percig 500 egyidejű felhasználóval 8 szálon.

wrk –t8 –c500 -d300s http://localhost

Autocannon

A munka ihlette, gépágyú Node.js-ben van írva. Használhatja programozottan, API-n vagy önálló segédprogramon keresztül. Csak előfeltételként kell telepítenie a NodeJS-t.

Számos kapcsolatot, kérelmet, időtartamot, dolgozókat, időtúllépést, csatlakozási sebességet szabályozhat, és rengeteg lehetőséget kínál a webalkalmazások összehasonlításához.

Curl-loader

curl-loader C nyelven íródott, hogy szimulálja az alkalmazás betöltését, és támogatja az SSL/TLS-t. A weboldalteszt mellett ezt a nyílt forráskódú eszközt is használhatja az FTP-kiszolgálók betöltésére.

Létrehozhat egy teszttervet HTTP, HTTPS, FTP és FTPS keverékével egyetlen kötegkonfigurációban.

httperf

Az httperf egy nagy teljesítményű eszköz, amely a mikro- és makroszintű benchmarkokra összpontosít. Támogatja a HTTP/1.1 és SSL protokollokat.

Ha rendelkezik a várt számú egyidejű felhasználóval, és szeretné tesztelni, hogy a webszerver képes-e számos kérést kiszolgálni, használhatja a következő parancsot.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

A fenti parancs másodpercenként 100 kéréssel tesztel 1000 HTTP kérés esetén.

Tsung

Tsung egy többprotokollú elosztott stressz-tesztelő eszköz a HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL szerverek stresszelésére. Támogatja a HTTP/1.0, HTTP/1.1 protokollokat, és a cookie-k kezelése automatikusan történik.

A jelentés létrehozása megvalósítható a Tsung segítségével.

Következtetés

Remélem, hogy a fenti benchmarking eszközök képet adnak a webszerver teljesítményéről, és eldöntik, mi a legmegfelelőbb a projektjéhez.

Ezután ne felejtse el figyelemmel kísérni webhelye teljesítményét.