mod_fcgid + PHP + блокировка apache - PullRequest
2 голосов
/ 04 апреля 2011

Я использую довольно типичный стек LAMP с PHP, работающим через mod_fcgid.Я бы посчитал, что сервер находится в состоянии «высокой нагрузки», учитывая объем трафика, который он получает.

Существует периодически возникающая проблема, когда Apache сообщает, что все соединения находятся в состоянии «Отправка содержимого» («W "на мониторе) при доступе к сайтам, использующим PHP.

Нет ошибок PHP, о которых говорилось бы, как будто PHP фактически не вызывается во время этих периодов" блокировки ".Однако в журналах сайтов Apache я вижу следующее:

(103)Software caused connection abort: mod_fcgid: ap_pass_brigade failed in handle_request function
[warn] mod_fcgid: can't apply process slot for /var/www/cgi-bin/php.fcgi

В течение этого времени я все еще могу получать доступ к сайтам, не зависящим от PHP, таким как состояние apache и виртуальные хосты только для HTML (которые не содержат обработчик PHP).

Сценарий php.fcgi имеет PHP_FCGI_MAX_REQUESTS = 500 , потому что я прочитал, что есть проблема состояния гонки с PHP, работающим в режиме CGI,В fcgid.conf также установлен MaxProcessCount = 15 .

Кто-нибудь еще сталкивался с этой ошибкой, и если да, то как ее можно устранить?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Мне удалось исправить это сам.

Чтобы решить эту проблему, добавьте более строгие проверки в конфигурации FastCGI для зависаний процесса и сократите время жизни ваших экземпляров PHP:

IPCConnectTimeout 20
ProcessLifeTime 120
IdleTimeout 60
IdleScanInterval 30
MaxRequestsPerProcess 499
MaxProcessCount 100

В зависимости от ваших требований, это может удовлетворить хорошо настроенный сервер, который имеет более 50 000 обращений в час.

Вы найдете, что число зарегистрированных PHP-процессов, которые больше не функционируют / "зомби", значительно увеличивается. Это хорошо, однако, так как ранее процессы просто перестали бы отвечать, и менеджер FastCGI продолжал бы направлять запросы к ним!

Я бы также посоветовал удалить все директивы override из вашего скрипта php.fcgi, так как это может вызвать проблемы в вашей системе. Попробуйте максимально управлять из первичной конфигурации FastCGI в Apache.

0 голосов
/ 04 апреля 2011

Мы пошли с Nginx + http://php -fpm.org /

Попробуйте "strace -p".

Я также видел блокировки, когда некоторые программы PHP пытались запросить файл с того же сервера, на котором он запущен (get_file_contents ('http://localhost. ..'))

...