LINUX.ORG.RU

Авто-убийство зомби процессов

 ,


0

2

Доброе время суток !

В общем возникла такая беда зомбирование процессов, с UDP прокси (udpxy), данная беда и ранее у меня происходила но за месяц накапливалось 2-3 зомби и это не вызывало особых проблем почистил и все. но сейчас их в сутки может набираться до 20 и чистить нужно ежедневно. так как я не нашёл дуруго го UDP прокси (бесплатного и чтобы работал), а IP TV мне хочется вынужден жить с тем что есть.

Вот такая картина имеется у меня с учетом того что вечером чистил:

faster@server:~$ ps aux |grep udpxy
root     20701  0.0  0.0   4580  1748 ?        S    ноя17   0:02 udpxy -p 8888 -l /var/log/udpxy.log
root     22053  0.2  0.0      0     0 ?        Z    06:50   0:14 [udpxy] <defunct>
root     22653  0.4  0.0      0     0 ?        Z    07:00   0:20 [udpxy] <defunct>
root     23442  0.0  0.0      0     0 ?        Z    07:11   0:00 [udpxy] <defunct>

Хочу спросить есть ли у кого решение данной проблемы , может скрипт веселый на баше ? или есть утил какой, в общем порекомендуйте…

На реддите не так давно был тред со ссылкой на убийцу зомби. Полистайте r/linux

anonymous
()

сейчас их в сутки может набираться до 20 и чистить нужно ежедневно

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

А вообще, не убийство своих дочерних процессов - не нормальное состояние. Возможно, позже udpxy все же захочет узнать статус этих процессов, а ты их уже убил и вместо них крутятся какие-то левые процессы.

Лучше исправить проблему, чем бороться с причиной.

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

anonymous
()

Зомби процесс это и есть уже убитый процесс. Это просто заглушка в таблице процессов, хранящая его PID. Они появляются оттого, что процесс-родитель по какой-то процине не обработал SIGCHLD.

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

anonymous - Спасибо , прям в кассу …

Проблема понятно что грохается UDPXY и тут я ничего не могу поделать, он мне нужен

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

исчерпание лимита в 30к тебе

они уже вроде 4х байтные

 257477 ?        Ss     0:09 gpg-agent --daemon --write-env-file
 257502 ?        Ss     0:00 ssh-agent
sergej ★★★★★
()

timeout command?

anonymous
()

а чего мешает наколхозить скрипт формата «ps ax | grep zombi | kill» и засунуть в крон ?? ничего сложного в скрипте нет.
це ж юникс, а не мандавошка. весь инструментарий есть «искаропки».

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

А вот родителя убивать нехорошо. Проще тогда рестарт сервиса пинать. А вообще накой нужен такой софт, который плодит чумных зомбе ?

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

сервис рестартить должон менеджер сервисов. а уж от чего сервис прибился, это не его проблемы.
вообще это костыль как и в любом другом вышеописанном случае. чуть короче или чуть длиннее это уже эквипенисуально.

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

спасибо, для моего кода это очень пригодилось

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

Скажите вы способны это сделать ? Я хоть и являюсь кодером но я : 1-Windows’ятник 2-Низкоуровневый , PLC .PLIS ип рочее 3-Я никсы осваиваю всего год и то так сказать по мере надобности

ну и под завязку , я ВООБЩЕ НЕ ЗНАЮ как работает IP TV … (имеется ввиду знаю этокогда понимаю. общие понятия с стати типа википедия присутсвует)

а вы хотите чтобы я код поправил … оч оригинально

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

Наверное потому что убивать надо материнский процес а не самого зомби ,

простой скрипт , кидай сорци … Я никогда не понимал когда тонущему начинают советовать как плыть…

насчет баша , только начал читать .. синтаксис мосК ломает мне

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

Не могли бы вы дать пояснение по пунктам как это работает , по пунктам …

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

UDPXY не сервис , это просто подвешенный демон, так что за него ни кто не в ответе

Fastereus
() автор топика

Если кому интересно как это работает

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]' | awk '{ print $2 }')
  • команда KILL посылает сигнал 9 (SIGKILL - Безусловное завершение) списку полученному из выражения в скобках *которое формируется их вывода команды: ps -A -ostat,ppid - Вывести список процессов отображая только его статус и PID материнского процесса

  • Данные выведенные ps обрабатываются через: grep -e ‘[zZ]’ -которая обрабатывает строки в соответствии с регулярным выражением , и если в строке есть хоть одна из буква указанная в скобках то она выводится, так далее мы на выходе получаем только номера PID материнских процессов у которых дочерние статус Z или z

  • вывод фильтрованный grep перенаправляется в: awk ‘{ print $2 }’ -Построчно обрабатывает полученные данные выполняя для каждой строки скрипт в кавычках, а именно выводит только второй столбик…

  • итог в команду kill п очереди подставляются PID материнских процессов от зависших зомби

УХ сам разобрался …

Автор исходного текста не поместил в блок кода и по этому копи паст не сработал , ибо текст был переформатирован форумом :)

Fastereus
() автор топика
Последнее исправление: Fastereus (всего исправлений: 1)

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

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

При этом, убивая зомби, ты ломаешь логику родительского процесса, т.к. он ожидает, что под определенным пидом будет его дочерний процесс, а ты его убиваешь, на его месте может запустится другой сторонний процесс (одни и те же пиды могут переиспользоваться). Или даже если не запустится, waitpid или подобная функция завершится ошибкой и насколько она будет адекватно обработана, на совести автора. Но это явно нештатная ситуация и их, обычно, редко покрывают тестами.

И это уже не говоря о том, что даже убийство зомбей ты сделал кривейшим способом: ты убиваешь вообще всех зомбей в системе, и от udpxy и не от него. Насколько стабильно будет работать такая система — вопрос случая.

anonymous
()
Ответ на: комментарий от Fastereus

Скажите вы способны это сделать ?

Конечно. Если, разумеется, там есть что исправлять, как уже верно тут заметили.

ВООБЩЕ НЕ ЗНАЮ как работает IP TV

А этого и не нужно. Нужно взять сырцы и всего лишь посмотерть где там процессы рождаются и почему могут становится зомбями. Для начала достаточно просто собрать с make debug, как в README написано и посмотреть.

а вы хотите чтобы я код поправил … оч оригинально

Код он и в африке код, тем более такой простой. Любой знакомый с программированием человек способен его понять и отладить. Если не способен - то этот человек однозначно не умеет программировать.

Stanson ★★★★★
()
12 февраля 2020 г.
Ответ на: комментарий от Stanson

Все проходит и это прошло

в общем проблема самолеквидировалась, провайдер перешел на андройд приставки…

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