Мой сайт перешел с 20 000 посещений в день до 182 000 вчера из-за того, что он был представлен на ряде популярных сайтов.
Сайт стал несколько не отвечать. Многие запросы приводят к таймауту. Тем не менее, есть много доступного процессора и оперативной памяти. ЦП и ОЗУ на самом деле не превысили 20%, а в среднем составляют около 12%. Подключение к 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 ТБ, из которых мало что используется.
Вы должны включить mod_status
и посмотреть, не достигли ли вы ограничений apache для одновременных подключений. Вероятно, вы установили эти пределы слишком низкими и должны увеличить значения MaxClients
, ThreadLimit
и ThreadPerChild
, в зависимости от того, какой модуль mpm вы используете.
Еще кое-что, что нужно проверить в журнале ошибок 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
#
Надеюсь, это поможет