Работа с PHP-процессами Zombie на виртуальном хостинге

Я использую общий хостинг. Я вижу постоянно растущее количество процессов. Когда я посмотрел в ps auxЯ видел, что около двух <defunct> процессы lsphp добавляются каждый день. Сейчас общее число превышает 40, и на этом хостинге жестко ограничено 100 процессов, что меня беспокоит.

Я заметил, что работает TIME из этих процессов было 0:29 или же 0:30, Это заставляет меня подозревать, что это процессы, которые заканчиваются временем выполнения. Я установил это время вручную в своем коде в начале: ini_set('max_execution_time', 30); потому что самые медленные сценарии на моем сайте выполняются в течение 3-5 секунд и 30 секунд, что кажется достаточно большим промежутком, чтобы понять, что процесс завис и не будет продолжен. Однако это, кажется, имело обратный эффект.

Я посмотрел журналы приложений, и кажется, что зависшие процессы (по крайней мере, те, которые превышают ограничение по времени) являются DomPDF, которые являются самыми длинными. Я думаю, что пользователь запрашивает PDF, но закрывает соединение до того, как PDF был подготовлен и ответ был отправлен, и, возможно, это каким-то образом оставляет процесс в состоянии ожидания … Или просто DomPDF получает себя в этом состоянии?

Что может быть причиной? Что я могу сделать, чтобы решить это?

Могу ли я каким-либо образом (путем изменения сценария PHP) предотвратить эти процессы от зомбирования? Есть ли у меня шанс убить процессы (у меня нет прав на перезагрузку компьютера или на уничтожение родительского процесса).

2

Решение

Вы ничего не сказали нам о том, как настроена система, кроме того, что это «виртуальный хостинг». Что это общий хостинг означает, что вы вряд ли будете иметь возможность сильно влиять на его поведение, а первый Человек, с которым вам следует поговорить, является поставщиком услуг — в конце концов, вы платите им за поддержку.

Что вы видите процесс PHP предполагает что он настроен как CGI или fastCGI — (или, не дай бог, suPHP). Хотя существует множество причин, по которым у вас могут быть процессы-зомби, они могут не учитываться при ограничении вашего сервера (вы не сказали, как это было реализовано / применено). Вероятные причины:

  • у вас есть какой-то менеджер процессов fCGI, который устанавливает ограничение по времени — к которому у вас, вероятно, нет доступа
  • у вас есть ignore_user_abort (true) в некоторых ваших скриптах

Поговорите с вашим хостинг-провайдером.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]