Сервер медленный, но много процессора и оперативной памяти
Мой сайт вырос с 20 000 посещений в день до 182 000 вчера, благодаря тому, что он размещался на ряде популярных сайтов.
Сайт стал несколько не отвечает. Многие запросы приведут к тайм-ауту. Тем не менее, есть много процессора и оперативной памяти. ЦП и ОЗУ на самом деле не достигли пика выше 20% и составляют в среднем около 12%.
При попытке загрузить домашнюю страницу с помощью WGET, она остановится здесь:
Разрешение domain.io (domain.io)... 91.121.220.92 Соединение с domain.io (domain.io)|91.121.220.92|:80... не удалось: соединение истекло. Повторная.
Но если он действительно подключится, он быстро загрузит страницу. Кроме того, я могу подключиться к phpMyAdmin через браузер по IP, и он работает как обычно.
Это приводит меня к мысли, что есть проблема в Apache
Мои настройки:
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
Не уверен, какой из них я использую, проверим сейчас.
У кого-нибудь есть предложения по поводу того, с чем здесь повозиться? В Apache или иначе.
Когда я вхожу через SSH, он говорит:
System load: 2.92
Processes: 289
Users logged in: 0
Memory usage: 9%
Swap usage: 0%
Сервер представляет собой 4-ядерный процессор 3,2 ГГц с 32 ГБ ОЗУ и 2x2 ТБ, из которых мало что используется.
2 ответа
Некоторые другие вещи, которые нужно проверить, в журнале ошибок apache, проверьте наличие таких записей:
apache server reached MaxClients setting, consider raising the MaxClients setting
Это означает, что вы достигли настроенного максимального количества процессов / потоков
Еще одним хорошим признаком того, что apache не справляется с нагрузкой, возможно, из-за максимальной конфигурации потока / процесса, является переполнение очереди прослушивания, вы можете проверить это следующим образом:
netstat -s | grep -i listen
Обычно вы не получите вывод от этого, но в случае проблем вы получите:
# netstat -s | grep -i listen
26760 times the listen queue of a socket overflowed
26760 SYNs to LISTEN sockets ignored
#
Надеюсь это поможет
Вы должны включить mod_status
и посмотрите, не достигаете ли вы Apache пределов одновременных соединений. Возможно, вы установили эти пределы слишком низкими и должны увеличить значения MaxClients
, ThreadLimit
а также ThreadPerChild
зависит от того, какой модуль mpm вы используете.