Назад | Перейти на главную страницу

Apache2 / mod_fcgid / ограничения процесса PHP не соблюдаются

Недавно я перешел на Apache2 / mod_fcgid / PHP с nginx / php_fpm. Это второй сервер, на котором я сделал эту миграцию, но он используется гораздо реже, чем первый, который работает как шарм.

Проблема заключается в порождаемых им процессах PHP. Глядя на документация mod_fcgid, похоже, что значение по умолчанию для уничтожения незанятых процессов составляет 300 секунд; Я изменил это на 20. На данный момент, я был бы в порядке, если бы 300 работал, но этого не происходит. Он работает уже почти день, и в статусе сервера отображается 12 активных процессов:

Process name: php5
Pid Active  Idle    Accesses    State
19243  84879   14420       11      Ready

Process name: php5
Pid Active  Idle    Accesses    State
20954  82143   149         22      Ready
20947  82149   149         22      Ready
20953  82143   149         13      Ready

Process name: php5
Pid Active  Idle    Accesses    State
20589  82765   23644       72      Ready

Process name: php5
Pid Active  Idle    Accesses    State
17663  86103   2034       117      Ready

Process name: php5
Pid Active  Idle    Accesses    State
19862  83961   1976        91      Ready

Process name: php5
Pid Active  Idle    Accesses    State
18495  85825   5164        18      Ready

Process name: php5
Pid Active  Idle    Accesses    State
25463  75109   23948       24      Ready

Process name: php5
Pid Active  Idle    Accesses    State
2466   60019   60016        2      Ready

Process name: php5
Pid Active  Idle    Accesses    State
20729  82541   12592       23      Ready

Process name: php5
Pid Active  Idle    Accesses    State
22135  80616   46361        6      Ready

На данный момент приложения PHP не обслуживаются - Apache возвращает 503. Однако он все еще обслуживает модуль состояния сервера, а приложения mod_mono / Mono 2.10 все еще обслуживаются. Проблема в PHP.

/etc/apache2/mods-available/fcgid.conf ...

<IfModule mod_fcgid.c>
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 10
  FcgidMaxRequestsPerProcess 500
  FcgidIdleTimeout 20
  FcgidFixPathinfo 1
  FcgidMaxProcesses 10
</IfModule>

(хех - Максимальное количество процессов тоже не соблюдается ...) Конечно, fcgid.conf при включенных модах добавлен в smylink.

Попробуйте установить переменную env:

PHP_FCGI_CHILDREN=0

в вашем стартовом скрипте php.

mod_fcgid позаботится о запуске всех необходимых процессов. Так что на самом деле дети не нужны, и обычно они остаются позади.