The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как узнать отчего умер PHP процесс ???"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Как узнать отчего умер PHP процесс ???"  
Сообщение от zeiter email(ok) on 31-Мрт-09, 10:53 
Доброго дня!

Уже все проверил:

/etc/login.conf - ограничения на время сняли.
В apache ограничения на время тоже никаких не нашли.
В php скрипте стоит бесконечный set_time_limit.
Памяти хватает, проверяли.

А процесс отваливается через 5-6 минут.

Как узнать, отчего он умер? В логах нигде ничего...
Может как-то научить PHP писать в логи причину смерти запущенного процесса?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как узнать отчего умер PHP процесс ???"  
Сообщение от zeiter email(ok) on 31-Мрт-09, 10:59 
Могут ли быть этому причиной лимиты Апача:

RLimitMEM   480000000 480000000
RLimitCPU   30        60
RLimitNPROC 60        60

Вот каким таким образом они могут влиять?
Ведь убрали RLimitCPU, и скрипт уже 17 минут работает, а до этого дольше 5-6 минут не работал.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Как узнать отчего умер PHP процесс ???"  
Сообщение от Слава (??) on 31-Мрт-09, 12:00 
>Могут ли быть этому причиной лимиты Апача:
>
>
RLimitMEM   480000000 480000000 
>RLimitCPU   30        60
>
>RLimitNPROC 60        60

>
>Вот каким таким образом они могут влиять?
>Ведь убрали RLimitCPU, и скрипт уже 17 минут работает, а до этого
>дольше 5-6 минут не работал.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Как узнать отчего умер PHP процесс ???"  
Сообщение от zeiter email(ok) on 31-Мрт-09, 12:10 
>Думаю могут, если это лимиты на процесс, то скрипты PHP запускаются как
>потомки апача и лимиты действуют и на них, если на пользователя
>под которым работает Apache, то опять таки лимита действуют и на
>потомком апача, т.к. они все работают от такого же пользователя.

Может я чего-то не понимаю, но в top'е для потомка апача, который обслуживает данное соединение время по нулям:


  PID USERNAME      THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND

67859 apache          1  44    0 16508K 13872K select   0:00  0.00% httpd

А лимит RLimitCPU - это лимит на процессорное время, и мне не понятно, как он тогда срабатывает. И почему через 5-6 минут?

PHP работает от имени владельца виртуального хоста (PHP-CGI через suPHP).

Так, а есть способ логировать причину смерти процесса PHP?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Как узнать отчего умер PHP процесс ???"  
Сообщение от angra (ok) on 31-Мрт-09, 15:37 
>А лимит RLimitCPU - это лимит на процессорное время, и мне не
>понятно, как он тогда срабатывает. И почему через 5-6 минут?

Это лимит на время процессора, а не на реальное время. Упрощенно: если лимит одна секунда, и процесс сжирает 1% cpu в секунду, то его убьет через 100 секунд реального времени.  
>PHP работает от имени владельца виртуального хоста (PHP-CGI через suPHP).

ну так причем здесь потомки апача, смотрели бы время самого процесса
>Так, а есть способ логировать причину смерти процесса PHP?

Как всегда зависит от способа смерти, но вы ведь именно его и не знаете :)

Скажите, а зачем вам вообще долго живущие cgi скрипты? Нужда в подобном обычно означает ошибку в самой схеме работы.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Как узнать отчего умер PHP процесс ???"  
Сообщение от zeiter email(ok) on 31-Мрт-09, 15:55 
>ну так причем здесь потомки апача, смотрели бы время самого процесса

Время самого процесса, как вы заметили (с убранным RLimitCPU):
было реальное 1 час, процессорное ~2-3 минуты.

Так лимит-то на время процессора стоял в апаче.
Да, да... RLimitCPU же действует на время работы скрипта, а не на время жизни потомка апача. И в таком случае все складывается и сходится. Потому что, когда отваливался процесс PHP, процессорное время по нему в топе было ~30 секунд, а реальное время 5-6 минут.

>
>Как всегда зависит от способа смерти, но вы ведь именно его и
>не знаете :)

Т.е. если процесс PHP умер по лимиту процессорного времени (RLimitCPU) это никак нельзя зафиксировать в логах?

>Скажите, а зачем вам вообще долго живущие cgi скрипты? Нужда в подобном
>обычно означает ошибку в самой схеме работы.

Долгоживущие не нужны. Наоборот стремимся ограничить их в обычной жизни.

Но в данной ситуации была задача импортировать большое количество данных в MySQL базу, а движок написан на PHP, вот и разбирались, где затык, т.к. процесс умирал слишком рано.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Как узнать отчего умер PHP процесс ???"  
Сообщение от zeiter email(ok) on 02-Апр-09, 11:29 
>>Так, а есть способ логировать причину смерти процесса PHP?
>
>Как всегда зависит от способа смерти, но вы ведь именно его и
>не знаете :)
>

Как-то хостился на majordomo, так вот там в логи моего демона писалось (демон писал свои логи), что процесс был убит "проверялкой ежечасной"... значит все-таки такое в некоторых случаях возможно...

Отюда вопрос, делается это через php.ini или все-таки в каждом скрипте через обработчик событий? Может еще как-то?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру