Не убиваются процессы в apache2

12
Raistlin
На сайте с 01.02.2010
Offline
247
#11
pashatlt:
Тогда возникает вопрос, каким образом может php скрипт вызвать зависание процесса apache?

time_limit в php.ini настроен на слишком большое значение. Скорее всего, вам уже не хватает процессорной мощности для обработки этого скрипта.

Ваш скрипт не вешает апач. Вешается сам скрипт, а апач в это время ждет, когда же он выполнится.

HostAce - Асы в своем деле (http://hostace.ru)
P
На сайте с 16.07.2009
Offline
101
#12
Andreyka:
Правильный ответ - настроить сервер так, чтоб апач убивался вне зависимости от скрипта, на уровне системы

Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.

Raistlin:
time_limit в php.ini настроен на слишком большое значение. Скорее всего, вам уже не хватает процессорной мощности для обработки этого скрипта.

Для данного скрипта time_limit = 120, насчет перегрузки процессора неуверен - сейчас смотрю через top, там максимум 10-15 процентов показывает.

Raistlin:
Вешается сам скрипт, а апач в это время ждет, когда же он выполнится.

А почему не срабатывает timeout в апаче? Или у него другая функция?

Bazis007
На сайте с 10.06.2008
Offline
84
#13

Что говорит server-status ?

M
На сайте с 01.12.2009
Offline
235
#14
Bazis007:
Что говорит server-status ?

и как он там увидит, зависшие процессы ?

Администратор Linux,Freebsd. построения крупных проектов.
P
На сайте с 16.07.2009
Offline
101
#15
Bazis007:
Что говорит server-status ?

Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.

madoff:
и как он там увидит, зависшие процессы ?

Ставил maxrequestperchild=1 и видел, что через час-два-три процесс все еще не был убит.

Andreyka
На сайте с 19.02.2005
Offline
822
#16
pashatlt:
Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.

Это может делать и ядро ОС.

Не стоит плодить сущности без необходимости
Bazis007
На сайте с 10.06.2008
Offline
84
#17
и как он там увидит, зависшие процессы ?

Увидит по состоянию воркеров. Аналогичная проблема в своё время была у меня на FirstVDS. Правда возникла она по вине хостера. Но процессы упорно висели. И дело было совсем не в скриптах.

Кстати в других местах всё нормально? Сбои где-нибудь наблюдаются?

Bazis007 добавил 26.07.2010 в 18:11

Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.

как много тех и других? В идеале увидеть бы всю картину.

Кстати W - Судя по всему - это живые

G - в свободной природе практически не встречаются, и скорей всего это и есть зависшие.

несколько раз пообновляйте статус и понаболюдайте, прав ли я.

Мне кажется что проблема не в скриптах, а либо в апаче, либо глубже.. Возможно что то с дисковой подсистемой.

P
На сайте с 16.07.2009
Offline
101
#18
Bazis007:

Кстати в других местах всё нормально? Сбои где-нибудь наблюдаются?

Нет, в остальном все в полном порядке. Подправил скрипт - все вернулось в норму. В день где-то около 300К запросов, ничего больше не зависает, хотя есть более сложные скрипты.

Bazis007:

как много тех и других? В идеале увидеть бы всю картину.
Кстати W - Судя по всему - это живые

В основном все W, G - лишь парочку видел. Как много - ну в среднем 2-3 процесса в минуту зависали, когда ставил maxrequestperchild=1. Всего в день запросов к этому скрипту около 10К.

Вот, кстати, скрипт:


set_time_limit(120);
do {
$xml = file_get_contents("http://www.imageshack.us/upload_api.php?url=*****************");
$data = $xml2assoc($xml);
} while($data['imginfo']['links']['image_link']=='');
echo $data['imginfo']['links']['image_link'];
exit;

Логика такая: делаю запрос к imageshack.us, отправляю через GET url фотографии, которую этот сайт должен скачать с моего сайта (статика через nginx). Иногда с первого раза не получается, поэтому делаю через цикл, пока не получится верный ответ. По идее, это дело может зависнуть, но через 2 минуты PHP должен остановить скрипт, ну и апач - убить процесс. Когда убрал цикл - т.е. передача данных всего один раз, апач стал нормально работать.

M
На сайте с 16.09.2009
Offline
278
#19
pashatlt:
Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.

Ставил maxrequestperchild=1 и видел, что через час-два-три процесс все еще не был убит.

Взять и посмотреть процесс что делает командой strace. Хорошие дистрибутивы позволяют также установить отладочные символы для популярных программ (типа апача) и использовать gdb, чтобы понять на чем тот "завис":

gdb -p <pid of a hanging process>

bt full
Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий