LINUX.ORG.RU
решено ФорумAdmin

Эти ваши системы управления процессами...


0

1

На сервере сейчас 2481 defunct процесс:

balancer 28319  0.0  0.0      0     0 pts/20   Z+   18:46   0:00 [php] <defunct>
balancer 28474  0.1  0.0      0     0 pts/20   Z+   18:47   0:00 [php] <defunct>
balancer 28481  0.0  0.0      0     0 pts/20   Z+   18:47   0:00 [php] <defunct>
balancer 28638  0.0  0.0      0     0 pts/20   Z+   17:34   0:00 [php] <defunct>
balancer 28956  0.0  0.0      0     0 pts/20   Z+   18:46   0:00 [php] <defunct>
...

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

Что делать? Растарт - крайняя мера.

// кросспостинг

★★★★★

>2481 defunct процесс

Уже 2659. Количество непрерывно возрастает...

KRoN73 ★★★★★
() автор топика

Они в потомках у какого процесса?

Deleted
()
Ответ на: комментарий от isden

> убиение предка этих процессов

что впрочем помогает не всегда.

isden ★★★★★
()

Всё, разобрался. PHP+Gearman-клиент дурит, походу. Если работать с таймаутом, то таймаут ставится ровно в одну секунду независимо от выставленного значения и каждую секунду рождается новый PHP-зомби.

Тупо сделал выход из скрипта через 100 циклов (aka 100 секунд) и поставил его в bash-loop :)

Странно, за полтора суток работы оно должно было породить 130 тыс. зомби. А породило только ~2700. Значит, проблемы где-то меньше часа назад начались? Ну, х.з...

KRoN73 ★★★★★
() автор топика

Гы. Отловил. Упасть и не встать :D В общем, на одном из контактов, которому пошло сообщение о нотификации, стоял автоответчик, походу :) И мой бот затеял с ним высокоскоростную беседу :D И, таки да, это были чистые PHP-форки, почему-то не закрывающиеся, хотя честный exit()...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

И мой бот затеял с ним высокоскоростную беседу :D

Задротские у вас боты. Чёткие боты девушек клеят :)

Xenesz ★★★★
()

>Эти ваши системы управления процессами...

Эта ваша гента...

Led ★★★☆☆
()

>Эти ваши системы управления процессами...

Эти ваши PHP'ы...

Led ★★★☆☆
()
Ответ на: комментарий от Eddy_Em

>Может, обновить пыхпых и ядро?

Gentoo же :)

Такие зомби иногда и по kill -9 не убиваются...


Видишь ли, проблема концептуальная. Откуда эти зомби, вообще, берутся? Ну видит же система сама, что процесс уже - зомби. Ничего не делает, ничего не жрёт. Ну и зачем она его держит?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

>Ядро дырявое?

Ага. Лет 10, как минимум :D По крайней мере тогда я впервые с этой проблемой столкнулся...

И, вообще, не делайте вид, что впервые слышите :D

http://www.google.ru/#sclient=psy&hl=ru&newwindow=1&q=%D0%B7%D0%BE%D0%BC%D0%B...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

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

Eddy_Em ☆☆☆☆☆
()

Мда ... прелести PHP ... в полный рост ... отсутствие нормального управления памятью пока не дает о себе знать ? Ну, да все еще впереди :-)

ef37 ★★
()
Ответ на: комментарий от Eddy_Em

>почему-то эту дыру никак не заткнут

А откуда тогда предок будет брать информацию о состоянии потомка? Скажем, проснулся первый через недельку, и говорит «А как там^Uwait(дитё);». К этому времени PID==дитё уже у другого процесса. И как ОС догадается, о ком отвечать?

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

А что мешает ядру отправлять какой-нибудь SIGCHLD предку? А если через n-е время предок не среагирует, бросать ему SIGTERM, а если и на него не среагирует - то SIGKILL? Ну и кроме того, не должно быть такого, чтобы рут не мог убить какой-либо процесс по SIGKILL.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ef37

>Мда ... прелести PHP ... в полный рост ...

То есть зомби в ядре - это работа PHP? :)

отсутствие нормального управления памятью пока не дает о себе знать ?


Так форки же. За полтора суток непрерывной работы (до сабжа) потребление памяти скриптом ни на процент не выросло :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от DonkeyHot

>К этому времени PID==дитё уже у другого процесса. И как ОС догадается, о ком отвечать?

Ну, например, ОС могла бы тогда такие «висячие PID'ы» за процессы не считать при учёте лимитов :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>если через n-е время предок не среагирует, бросать ему SIGTERM, а если и на него не среагирует - то SIGKILL

А может предок вовсе не забыл о потомке, а делом занят? Ты знаешь абсолютное время, дольше которого заниматься делом никто никогда не должен?

DonkeyHot ★★★★★
()
Ответ на: комментарий от KRoN73

>ОС могла бы тогда такие «висячие PID'ы» за процессы не считать при учёте лимитов

Тогда мы бы имели новый тип DOS-а - исчерпание PID-ов, которые лимитами не ограничиваются:)

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Если предок не реагирует на SIGCHLD, можно через, скажем, минуту, послать предку еще раз SIGCHLD. Если опять реакции нет - предка можно убивать, т.к. он гарантированно висит.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от DonkeyHot

>Тогда мы бы имели новый тип DOS-а - исчерпание PID-ов

Кстати, о птичках. И о 64-х разрядных современных int'ах :)

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

KRoN73> сообщение о нотификации

вот тут оно и зациклилось :-)

sdio ★★★★★
()
Ответ на: комментарий от KRoN73

>Кстати, о 64-х разрядных современных int'ах

Так в чём проблема? Подними себе лимиты; память же нынче в изобилии.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Проблема в том, что проблема нынче не в памяти. Точнее - не в одной памяти.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Ну видит же система сама, что процесс уже - зомби. Ничего не делает, ничего не жрёт. Ну и зачем она его держит?

Чтобы родитель процесса мог сделать wait() или waitpid().

Nastishka ★★★★★
()
Ответ на: комментарий от Nastishka

>Чтобы родитель процесса мог сделать wait()

wait кого, если процесс уже убит?

KRoN73 ★★★★★
() автор топика

Произошло чудо, у меня умер зомби. Мне казалось это невозможно. Он просто сам взял и умер.

swelf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.