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.
Tartalomjegyzék
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.
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.
-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.
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.