Мой сайт стал получать с 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 ТБ, из которых мало что используется.
Некоторые другие вещи, которые нужно проверить, в журнале ошибок 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 вы используете.