2009-12-15 19 views
6

Na moim serwerze sieciowym Fedory Core 9 z jądrem 2.6.18, init nie zbiera żetonów zombie. Byłoby to znośne, gdyby nie to, że tabela procesów ostatecznie osiągnęła górny limit, w którym nie można przydzielić nowych procesów.init nigdy nie zbierając zombie/nieistniejących procesów

Przykładowe wyjście z ps -el | grep 'Z':

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY   TIME CMD 
5 Z  0 2648  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z 51 2656  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z  0 2670  1 0 75 0 -  0 exit ?  00:00:02 crond <defunct> 
4 Z  0 2874  1 0 82 0 -  0 exit ?  00:00:00 mysqld_safe <defunct> 
5 Z  0 28104  1 0 76 0 -  0 exit ?  00:00:00 httpd <defunct> 
5 Z  0 28716  1 0 76 0 -  0 exit ?  00:00:06 lfd <defunct> 
5 Z 74 10172  1 0 75 0 -  0 exit ?  00:00:00 sshd <defunct> 
5 Z  0 11199  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11202  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11205  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11208  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11211  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11240  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11246  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11249  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
5 Z  0 11252  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 
1 Z  0 14106  1 0 80 0 -  0 exit ?  00:00:00 anacron <defunct> 
5 Z  0 14631  1 0 75 0 -  0 exit ?  00:00:00 sendmail <defunct> 

Czy to jest bug OS? błędna konfiguracja? Szukam inspiracji co do źródła tego problemu. Dzięki

Odpowiedz

2

To uderzyło mnie na Ubuntu na 2 sposoby:

  1. coś z jądrem. W moim przypadku sterownik jądra ulegał awarii i przetwarzanie wewnętrzne uległo zniszczeniu. Najlepszym sposobem na sprawdzenie tego jest sprawdzenie/var/log/syslog (i dmesg), aby sprawdzić, czy coś wygląda nie tak - na przykład "BUG: nie można obsłużyć jądra NULL dereference wskaźnik przy 0000000000000028",

  2. Kiedy indziej Widzieliśmy, że dzieje się tak, gdy init nie jest "rodzicem procesu potomnego w większości celów" (rzeczywisty cytat ze strony podręcznika). Może się to zdarzyć, gdy używasz ptrace syscall (którego program strace używa wewnętrznie) do dołączenia do procesu. Na przykład, dostałem się do sytuacji, w której przywiązuję strace do procesu potomnego B. Ostatecznie proces B kończy się podobnie jak jego rodzic (nie jestem pewien, jaką kolejność). Proces B wygląda wtedy jak zombie, którego właścicielem jest init. Jednak jego rodzicem "najwięcej celów" był program strace. Po zabiciu strace, proces B został zebrany