Как да извърша тест за производителност на уеб сървър?

Знаете ли средното време за отговор на уебсайта си? Знаете ли колко едновременни потребители може да обслужи вашият сайт?

Тестването на натоварването е от съществено значение за уеб приложенията, за да знаят капацитета на уебсайта. Ако трябва да изберете уеб сървъра, едно от първите неща, които искате да направите, е да извършите тестване на натоварването и да видите кой работи добре за вас.

Бенчмаркингът може да ви помогне да вземете решение;

  • Кой уеб сървър работи най-добре
  • Брой сървъри, които трябва да обслужите x брой заявки
  • Коя конфигурация ви дава най-добри резултати
  • Кои технологични стекове се представят по-добре
  • Кога вашият сайт ще работи по-бавно или ще се повреди

Има няколко онлайн инструмента за извършване на стрес тест; ако обаче търсите вътрешно решение или искате да сравните само производителността на уеб сървъра, тогава можете да използвате ApacheBench и алтернативно някои от изброените по-долу инструменти.

Използвал съм Apache & Nginx уеб сървър, хостван на DigitalOcean да го тествам.

ApacheBench

ApacheBench (ab) е програма за команден ред с отворен код, която работи с всеки уеб сървър. В тази публикация ще обясня как да инсталирате тази малка програма и да извърша теста за натоварване, за да сравните резултатите.

Apache

Нека да инсталираме ApacheBench с помощта на команда yum.

yum install httpd-tools

Ако вече имате httpd-инструменти, можете да пренебрегнете това.

Сега нека видим как се представя за 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] ~]#

Както можете да видите, Apache е обработил 373 заявки в секунда и са били необходими общо 13,389 секунди, за да обслужи общия брой заявки.

  Конволюционни невронни мрежи (CNN): Въведение

Сега знаете, че конфигурацията по подразбиране може да обслужва тези много заявки, така че когато правите промени в конфигурацията, можете да направите теста отново, за да сравните резултатите и да изберете най-добрия.

Nginx

Нека направим теста, който направихме за Apache, за да можете да сравните кой се представя по-добре.

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

ЕХА!

Видя ли това?

Nginx обработва 6593 заявки в секунда! Победител.

Така че виждате, че просто сравнявате с два уеб сървъра, ще получите представа кой да изберете за вашето уеб приложение.

Горният тест е на CentOS 6.8, 64 бита. Можете да опитате множество комбинации от версия на ОС и уеб сървър за оптимални резултати.

Не харесвате ApacheBench по някаква причина? Не се притеснявайте, има много други, които можете да използвате за извършване на HTTP зареждане.

ОБСАДА

ОБСАДА е помощна програма за тестване на HTTP натоварване, поддържана от UNIX. Можете да поставите няколко URL адреса в текстов файл, за да заредите тестове. Можете да инсталирате обсада с помощта на yum.

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

За разбиване на параметрите.

  Коригиране на съобщение за грешка 8-12 на Sling TV

-q – за да го стартира тихо (без да показва подробности за заявката)

-t – бягане за 5 секунди

-c – 500 едновременни заявки

Както можете да видите, наличността е 100%, а времето за реакция е 0,04 секунди. Можете да промените параметъра на теста за натоварване въз основа на вашата цел.

Али

Али е сравнително нов инструмент за тестване на натоварването за извършване на анализ в реално време. Той поддържа множество платформи за инсталиране, включително Docker.

Веднъж инсталиран, изпълнете ali, за да видите подробностите за употребата.

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

Както можете да видите по-горе, имате опция за изпращане на HTTP заглавки, продължителност на теста, ограничение на скоростта, време за изчакване и др. Направих бърз тест на pctechbg.net Tools и ето как изглежда резултатът.

Докладът е интерактивен и дава подробна информация за латентността.

Gobench

Gobench е написан на език Go и проста помощна програма за тестване на натоварването за сравнение на производителността на уеб сървъра. Той поддържа повече от 20 000 едновременни потребители, което ApacheBench не поддържа.

Apache JMeter

JMeter е един от най-популярните инструменти с отворен код за измерване на ефективността на уеб приложенията. JMeter е базирано на Java приложение и не само уеб сървър, но можете да го използвате срещу PHP, Java. ASP.net, SOAP, REST и др.

  Най-добрите места за закупуване на име на домейн

JMeter има приличен приятелски графичен интерфейс, а най-новата версия 3.0 изисква Java 7 или по-нова версия, за да стартира приложението. Трябва да опитате JMeter, ако целта ви е да оптимизирате производителността на уеб приложението.

работа

работа е друг модерен инструмент за измерване на производителността, който натоварва вашия уеб сървър и ви дава подробности за латентност, заявка за секунда, трансфер за секунда и т.н.

С wrk можете да укажете да стартирате тест за натоварване с няколко нишки.

Нека вземем пример за провеждане на тест за 5 минути с 500 едновременни потребители с 8 нишки.

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

Автоматично оръдие

Вдъхновен от работата, автоматично оръдие е написан на Node.js. Можете да го използвате програмно, чрез API или самостоятелна помощна програма. Всичко, от което се нуждаете, е инсталиран NodeJS като предпоставка.

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

Товарач за къдрици

зареждане на къдрици е написан на C, за да симулира натоварването на приложението и поддържа SSL/TLS. Заедно с теста на уеб страницата можете също да използвате този инструмент с отворен код за извършване на натоварване на FTP сървъри.

Можете да създадете план за тестване с комбинация от HTTP, HTTPS, FTP и FTPS в една пакетна конфигурация.

httperf

The httperf е високоефективен инструмент, който се фокусира върху бенчмаркове на микро и макро ниво. Поддържа HTTP/1.1 и SSL протоколи.

Ако имате очаквания брой едновременни потребители и искате да тествате дали вашият уеб сървър може да обслужва определен брой заявки, можете да използвате следната команда.

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

Горната команда ще тества със 100 заявки в секунда за 1000 HTTP заявки.

Цунг

Цунг е многопротоколен разпределен инструмент за стрес тестване за стрес на HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL сървър. Поддържа HTTP/1.0, HTTP/1.1 и бисквитките се обработват автоматично.

Генерирането на отчет е възможно с Tsung.

Заключение

Надявам се, че горните инструменти за сравнителен анализ ви дават представа за производителността на вашия уеб сървър и ще решите какво работи най-добре за вашия проект.

След това не забравяйте да наблюдавате ефективността на уебсайта си.