Како извршити бенцхмарк перформанси веб сервера?

Да ли знате просечно време одговора ваше веб странице? Да ли знате колико истовремених корисника може да поднесе ваш сајт?

Тестирање оптерећења је од суштинског значаја да веб апликације знају капацитет веб локације. Ако желите да изаберете веб сервер, онда је једна од првих ствари коју желите да урадите да извршите тестирање оптерећења и видите који вам добро функционише.

Бенцхмаркинг вам може помоћи да одлучите;

  • Који веб сервер ради најбоље
  • Број сервера који вам је потребан да бисте услужили к број захтева
  • Која конфигурација вам даје најбоље резултате
  • Који технолошки скупови имају бољи учинак
  • Када ће ваш сајт радити спорије или ће се покварити

Постоји неколико онлајн алата за извођење теста стреса; међутим, ако тражите интерно решење или желите да мерите само перформансе веб сервера, онда можете користити АпацхеБенцх и алтернативно неке од доле наведених алата.

Користио сам Апацхе & Нгинк веб сервер на којем је хостован ДигиталОцеан да га тестирам.

АпацхеБенцх

АпацхеБенцх (аб) је програм командне линије отвореног кода који ради са било којим веб сервером. У овом посту ћу објаснити како да инсталирам овај мали програм и извршим тест оптерећења да бих упоредио резултате.

Апацхе

Хајде да инсталирамо АпацхеБенцх помоћу команде иум.

yum install httpd-tools

Ако већ имате хттпд-алатке, можете ово занемарити.

Сада, да видимо какав је учинак за 5000 захтева са истовременошћу од 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] ~]#

Као што видите, Апацхе је обрадио 373 захтева у секунди, а требало му је укупно 13,389 секунди да опслужи све захтеве.

  Да ли треба да ангажујете удаљеног програмера или не?

Сада знате да подразумевана конфигурација може да испуни ове многе захтеве, тако да када направите било какве промене у конфигурацији, можете поново да урадите тест да бисте упоредили резултате и изабрали најбољи.

Нгинк

Хајде да тестирамо шта смо урадили за Апацхе да бисте могли да упоредите који од њих има бољи учинак.

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

ВОВ!

Да ли си видео то?

Нгинк је обрадио 6593 захтева у секунди! Победник.

Тако да видите само упоређивање са два веб сервера, добићете идеју који да одаберете за своју веб апликацију.

Горњи тест је на ЦентОС 6.8, 64 бит. Можете испробати више комбинација верзије ОС и веб сервера за оптималне резултате.

Не волите АпацхеБенцх из било ког разлога? Без бриге, постоји много других које можете користити за обављање ХТТП учитавања.

СИЕГЕ

СИЕГЕ је ХТТП услужни програм за тестирање оптерећења подржан на УНИКС-у. Можете ставити више УРЛ-ова у текстуалну датотеку за учитавање тестова. Можете инсталирати опсаду користећи иум.

# yum install siege

Покренимо тест са 500 истовремених захтева у трајању од 5 секунди.

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

Да разбијемо параметре.

  Како да користите више монитора на вашем Мац-у

-к – да се покрене тихо (не приказује детаље захтева)

-т – трчање 5 секунди

-ц – 500 истовремених захтева

Као што видите, доступност је 100%, а време одговора је 0,04 секунде. Можете подесити параметар теста оптерећења на основу вашег циља.

Али

Али је релативно нов алат за тестирање оптерећења за анализу у реалном времену. Подржава више платформи за инсталацију, укључујући Доцкер.

Када се инсталира, покрените али да бисте видели детаље коришћења.

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

Као што видите изнад, имате опцију да пошаљете ХТТП заглавља, трајање теста, ограничење брзине, временско ограничење и још много тога. Урадио сам брзи тест на вдзвдз алатима и ево како изгледа излаз.

Извештај је интерактиван и даје детаљне информације о кашњењу.

Гобенцх

Гобенцх је написан на језику Го и једноставном услужном програму за тестирање оптерећења за бенцхмарк перформансе веб сервера. Подржава више од 20.000 истовремених корисника што АпацхеБенцх не подржава.

  10 најбољих Адобе Премиере Про додатака за појачавање вашег арсенала за уређивање

Апацхе ЈМетер

ЈМетер је један од најпопуларнијих алата отвореног кода за мерење перформанси веб апликација. ЈМетер је апликација заснована на јава и не само веб сервер, већ је можете користити против ПХП-а, Јаве. АСП.нет, СОАП, РЕСТ итд.

ЈМетер је добио пристојан ГУИ, а најновија верзија 3.0 захтева Јава 7 или новију за покретање апликације. Морате испробати ЈМетер ако је ваш циљ да оптимизујете перформансе веб апликације.

врк

врк је још један модеран алат за мерење перформанси који оптерећује ваш веб сервер и даје вам детаље о кашњењу, захтеву у секунди, трансферу у секунди итд.

Помоћу врк-а можете одредити да покренете тест оптерећења са одређеним бројем нити.

Узмимо пример покретања теста у трајању од 5 минута са 500 истовремених корисника са 8 нити.

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

Аутоцаннон

Инспирисан радом, аутоцаннон је написан у Ноде.јс. Можете га користити програмски, преко АПИ-ја или самосталног услужног програма. Све што вам треба је НодеЈС инсталиран као предуслов.

Можете да контролишете бројне везе, захтеве, трајање, раднике, временско ограничење, брзину везе и нудите мноштво опција за бенцхмарк ваших веб апликација.

Цурл-лоадер

цурл-лоадер је написан у Ц да симулира оптерећење апликације и подржава ССЛ/ТЛС. Уз тест веб странице, можете користити и овај алат отвореног кода за учитавање ФТП сервера.

Можете да направите план тестирања са мешавином ХТТП, ХТТПС, ФТП и ФТПС у једној конфигурацији серије.

хттперф

Тхе хттперф је алатка високих перформанси која се фокусира на мерила на микро и макро нивоу. Подржава ХТТП/1.1 и ССЛ протоколе.

Ако имате очекивани број истовремених корисника и желите да тестирате да ли ваш веб сервер може да испуни одређени број захтева, можете користити следећу команду.

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

Горња команда ће тестирати са 100 захтева у секунди за 1000 ХТТП захтева.

Тсунг

Тсунг је мулти-протоколски дистрибуиран алат за тестирање стреса за стрес ХТТП, СОАП, ПостгреСКЛ, ЛДАП, КСАМП, МиСКЛ сервер. Подржава ХТТП/1.0, ХТТП/1.1, а колачићи се аутоматски обрађују.

Генерисање извештаја је изводљиво са Тсунгом.

Закључак

Надам се да ће вам горњи алати за бенцхмаркинг дати идеју о перформансама вашег веб сервера и одлучити шта најбоље функционише за ваш пројекат.

Затим, не заборавите да пратите перформансе своје веб локације.