Чи знаєте ви середній час відповіді вашого сайту? Чи знаєте ви, скільки одночасних користувачів може обслуговувати ваш сайт?
Тестування навантаження має важливе значення для веб-додатків, щоб знати пропускну здатність веб-сайту. Якщо ви збираєтеся вибрати веб-сервер, то одна з перших речей, яку ви хочете зробити, це виконати навантажувальне тестування та побачити, який з них вам підходить.
Порівняльний аналіз може допомогти вам прийняти рішення;
- Який веб-сервер працює найкраще
- Кількість серверів, які потрібно обслуговувати 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 секунди.
Тепер ви знаєте, що конфігурація за замовчуванням може обслуговувати таку кількість запитів, тому, коли ви вносите будь-які зміни в конфігурацію, ви можете повторити тест, щоб порівняти результати та вибрати найкращий.
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 bit. Ви можете спробувати кілька комбінацій версії ОС і веб-сервера для досягнення оптимальних результатів.
Вам з якоїсь причини не подобається 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] ~]#
Щоб розбити параметри.
-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, тривалість тесту, обмеження швидкості, час очікування тощо. Я зробив швидкий тест на techukraine.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, а файли cookie обробляються автоматично.
З Tsung можна створити звіт.
Висновок
Я сподіваюся, що наведені вище інструменти порівняльного аналізу дадуть вам уявлення про продуктивність веб-сервера та вирішать, що найкраще підходить для вашого проекту.
Далі не забувайте стежити за ефективністю свого сайту.