Я пытаюсь оценить производительность своего веб-сервера с Linux и Apache. Я попробовал нагрузочное тестирование с помощью JMeter и постепенно увеличивал количество запросов и записывал время ответа, а также статистику использования ресурсов. Время отклика увеличилось после 40 ударов в минуту, однако использование ресурсов осталось прежним! Ресурсы ЦП, памяти, сети, ввода-вывода использовались недостаточно, даже когда я пробовал много запросов, что приводило к медленному времени отклика. Если быть точным, время ответа было хорошим, когда общее количество запросов в минуту было менее 6000, а когда мы опробовали 8000 запросов в минуту, время ответа увеличилось на 50%.
Info of the server:
Hardware: 1 Core with 2 GB RAM
OS: Ubuntu 12.04 LTS Server Edition
.
Application stack:
Apache, PHP
Конфигурация Apache с количеством клиентов:
<IfModule mpm_prefork_module>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
MaxServers 600
MaxClients 600
MaxRequestsPerChild 0
</IfModule>
Мне непонятно, почему эти ресурсы используются недостаточно. Не могли бы вы помочь мне, что мне делать, чтобы я мог использовать рост использования ресурсов?
Вот важная часть конфигурации apache:
LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 1000
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 600
MaxClients 600
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
DefaultType None
HostnameLookups Off
Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
Include conf.d/
Include sites-enabled/
Во-первых, вы должны попробовать разные URL-адреса для тестирования, а не только один, как я думаю, вы пытаетесь.
Также попробуйте увеличить значения для MaxServers
и MaxClients
чтобы вы не попали в узкое место. Вы можете проверить то же самое, попадаете ли вы в узкое место по количеству процессов, используя эту команду
# watch "ps ax | grep -http | wc -l"
Если оно близко к 600, вам нужно увеличить их значение, чтобы вы могли продолжить стресс-тестирование. Это также объясняет не увеличивающуюся нагрузку, потому что ваши соединения ждут, пока сервер освободится от предыдущих соединений.
Кроме того, я рекомендую отключить время поддержания активности (не уверен, отключено ли оно уже), чтобы вы могли получить более реальные результаты.
Производительность Apache может быть ограничена количеством доступных дескрипторов файлов и процессов. Эта статья может помочь: http://www.webperformance.com/load-testing/blog/2012/12/setting-apache2-ulimit-for-maximum-prefork-performance/
(отказ от ответственности: я работаю с автором)