Обнаружил периодически ошибку 500 на сервере, глянул в error_log домена, а там вот такие записи иногда:
1 2 3 4 5 |
[Fri Nov 07 01:07:00 2014] [warn] [client 88.208.54.180] mod_fcgid: can't apply process slot for /home/tennis/fcgi-bin/php5.fcgi [Fri Nov 07 01:07:00 2014] [warn] [client 94.77.112.141] mod_fcgid: can't apply process slot for /home/tennis/fcgi-bin/php5.fcgi [Fri Nov 07 01:07:03 2014] [warn] [client 94.77.78.189] mod_fcgid: can't apply process slot for /home/tennis/fcgi-bin/php5.fcgi [Fri Nov 07 01:07:06 2014] [warn] [client 88.208.45.222] mod_fcgid: can't apply process slot for /home/tennis/fcgi-bin/php5.fcgi [Fri Nov 07 01:07:07 2014] [warn] [client 66.249.64.17] mod_fcgid: can't apply process slot for /home/tennis/fcgi-bin/php5.fcgi |
UPD:
Опять похожая штука, поковырялся решилось все увеличением
MaxProcessCount
FcgidMaxProcesses
Да еще и LA (Load Average) скаканул под 100 загрузив проц по полной программе. Начал ковырять что это может быть, в итоге выяснил – клиент использует WordPress с каким то плагином корявым, создающим огромную нагрузку на базу mysql, при обращении к сайту, а плагин всего лишь выводит похожие новости. Глнул в стату mysql, отловил этот запрос, пустил на выполнение, выяснилоь что некоторые запросы, на ненагруженном сервере выполняются примерно 1-10 сек, траффика не много на сайте, программист по нормальному кеширование не захотел делать (я его понимаю, чужой код переписывать это пипец), в итоге просто добавил лимиты на выполнение php, что бы не было очередей на выполнение запросов и обработку подклчюений в apache. Ниже пример кончига для моего сервака:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi FcgidConnectTimeout 400 FcgidMaxRequestLen 10737418 PHP_Fix_Pathinfo_Enable 1 DefaultMaxClassProcessCount 70 MaxProcessCount 100000 FcgidMaxProcesses 40 FcgidMaxRequestsPerProcess 0 FcgidIOTimeout 700 FcgidProcessLifeTime 3600 FcgidIdleTimeout 300 FcgidIdleScanInterval 120 FcgidBusyTimeout 3600 FcgidBusyScanInterval 115 FcgidZombieScanInterval 3 FcgidErrorScanInterval 3 FcgidSpawnScore 1 FcgidTerminationScore 2 FcgidTimeScore 1 FcgidSpawnScoreUpLimit 10 </IfModule> |
Значение всех парамтеров гуглим на сайте apache.
А как это, “Глнул в стату mysql, отловил этот запрос, пустил на выполнение” – подскажите, пожалуйста!
очень просто, в mysql выполнил ‘show processlist’ – увидел какие процессы долго висят, какие запросы в очереди. Вообще в своей практике с этой ошибкой встретился уже несколько раз и это я уже понимаю что не решение. Сейчас не хватает времени более детально изучить вопрос. Для опыта недавно настроил два сервака на apache2-worker на одном висит 1 домен, на втором 13 доменов, оба сервака держат большой траф, так вот конфиг апача+fcgi на серваке с 1 доменов не работает с меньшим трафом (все равно ошибка из темы), увеличиваю паарметры
MaxProcessCount 2000
FcgidMaxProcesses 5000
FcgidMaxProcessesPerClass 700
Но все равно периодически ошибка попадается. Нужно поковырять и изучить связь этих параметров с кол-вом вирт. хостов.