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

PHP5-CGI не завершается

У меня есть сервер Plesk 9.5.4 на Debian с PHP 5.2.6-1 + lenny13, который сохраняет свои php5-cgi процесс постоянно активен. Я редактировал /etc/apache2/conf.d/fcgid.conf и изменил значения (и проверил, загружен ли конфиг в любом случае, что было правдой).

IdleTimeout 500
ProcessLifeTime 360

Но все же процесс продолжается более часа, а активность отсутствует более получаса.

Кто-нибудь знает, в чем может быть проблема?

mod_fastcgi

Проверьте свои настройки для

-minПроцессы n (5) Минимальное общее количество экземпляров динамического приложения FastCGI, разрешенное для одновременного запуска без остановки диспетчером процессов (из-за отсутствия спроса).

По умолчанию 5.

mod_fcgid

Проверьте свои настройки для

FcgidMinProcessesPerClass

Эта директива устанавливает минимальное количество процессов, которые будут сохранены в классе процесса после завершения запросов.

Этот параметр будет применяться ко всем приложениям, созданным для этого сервера или виртуального хоста. Используйте FcgidCmdOptions, чтобы применить этот параметр к одному приложению.

Процессы CGI остаются «живыми», поэтому они могут немедленно обрабатывать запросы. Они не завершаются после одного запроса, но часто настраиваются на обработку 500-5000 запросов, пока они не будут заменены новым.

Соответствующие параметры конфигурации:

PHP_FCGI_CHILDREN=60
PHP_FCGI_MAX_REQUESTS=5000

Управление процессами CGI

Веб-сервер не заботится об обработке 50+ экземпляров PHP-CGI, которые могут обрабатывать запросы, но оставляет эту работу серверу CGI. Сам сервер CGI поддерживает работу пула экземпляров PHP-CGI. Он также убивает их, когда они больше не нужны, и запускает их при необходимости.

Конфигурация CGI-сервера

IdleTimeout

сообщает диспетчеру процессов CGI, как долго ждать, пока процесс CGI вернет ответ.

Пример:

Веб-сервер получает HTTP-запрос, отправляет его на сервер CGI, сервер CGI передает его процессу PHP-CGI. Теперь процесс PHP-CGI выполняет вычисления и вычисления, и его выполнение занимает 1 минуту. Так как таймаут 120, все нормально.

Теперь поступает еще один запрос, вычисления усложняются, и процесс PHP-CGI завершается за 10 минут. Через 2 минуты сервер CGI достигает тайм-аута простоя процесса CGI и решает больше не ждать. Он возвращает HTTP-серверу ошибку: «данные не получены, время ожидания простоя».

ProcessLifetime

- это количество секунд, в течение которых процесс CGI может продолжать работать. После этого его заменяют на новый.