Есть ВПС сервер на базе Debian 8, на нем вертится apache-2.4.10 в режиме mpm-worker
для работы php использую mod_fcgi, без suexec.
PHP 5.6.29-0+deb8u1, без модулей кеширования.
настройки в целом ничего особенного:
<IfModule mod_fcgid.c>
FcgidIPCDir /var/run/mod_fcgid
FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
FcgidMaxRequestLen 20000000
FcgidConnectTimeout 10
FcgidIdleTimeout 10
PHP_Fix_Pathinfo_Enable 1
FcgidMaxProcesses 200000
</IfModule>
php-wrapper
#!/bin/bash
PHPRC=$PWD/../etc/php5
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS=99999990
SCRIPT_FILENAME=$PATH_TRANSLATED
export SCRIPT_FILENAME
exec /usr/bin/php5-cgi
На сервере 32Гб оперативки + 8 ядер, на ssd дисках. Основной контент немного статики + легкие php скрипты, данные беруться и записываются в redis на том же сервере. На сервере порядка 30 доменов, все работают по одному принципу.
Странность в том, что периодически, по не выясненным причинам, на ходу начинает падать php, сначала идет несколько таких сообщений:
(104)Connection reset by peer: [client 1.1.1.1:29617] mod_fcgid: error reading data from FastCGI server
[core:error] [pid 8840:tid 47795850016512] [client 1.1.1.1:29617] End of script output before headers: script.php
после чего происходит жесткое падение одного домена (самого нагржуеного)
mod_fcgid: can't apply process slot for /path/to/wrapper/php
При этом остальные домены работают без проблем, для каждого домена свой wrapper.
Лечится на время по разному, но вроде как помогает следующая комбинация
/etc/init.d/apache2 stop
rm -f /var/run/mod_fcgid/*
/etc/init.d/apache2 stop
В скрипт
/etc/init.d/apache2 добавил
ulimit -s unlimited
Вариант увеличить FcgidMaxProcesses не помогает, все равно периодами падает. Из симптомов еще
- Падает после перезапуска (добавлял домены на сервер - после активации и "reload" для apache2 происходила эта ситуация, так же после ротации логов и просто на ходу.
Есть подозрение что все это как то связано с тайматуами для FCGI и какими то еще лимитами, но не могу понять какими именно, похожий конфиг и с большей нагрузкой есть на другом сервере, но на нем трафика от 2 до 5 раз больше.
Подозреваю что то типа - когда апач рестртуется, релоадится или еще что то, остаются где то в системе подвисшие fcgi таблицы, когда апач стартует, он ожидает от этих таблиц (процессов или как их правильно назвать не знаю) ответа, данных или еще какой то активности, но ее не происходит, в итоге забиваются какие то лимиты и wrapper не может создать еще процессы для обработки запросов, в итоге апач валит 503 и все ложится.
Тут на сервере нагрузка в среднем 30-50 запросов в секунду.
Вариант ставить nginx+php-fpm не рассматриваю так как не вижу смысла, php-fpm не особо отличается от fcgi режима, думаю что при большой нагрузке могут быть похожие проблемы, а тестировать не хочу без серьезных аргументов.
Основная рекомендация в интернете повышать кол-во процессов для FcgidMaxProcesses, но толку нет, так же как и от PHP_FCGI_MAX_REQUESTS.
Так как все остальные домены работают, думаю причина в каких то настройках php, но не могу понять каких. Все домены работают от www-data.