init non raccoglie mai processi zombie/defunti
-
19-09-2019 - |
Domanda
Sul mio server web Fedora Core 9 con kernel 2.6.18, init non raccoglie processi zombie.Ciò sarebbe sopportabile se non fosse per la tabella dei processi che alla fine raggiunge un limite superiore in cui non è possibile allocare nuovi processi.
Esempio di output di 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>
È un bug del sistema operativo?configurazione errata?Sto cercando ispirazione per quanto riguarda l'origine di questo problema.Grazie
Soluzione
Questo mi ha colpito su Ubuntu in 2 modi:
Qualcosa non va nel kernel.Nel mio caso un driver del kernel si era bloccato e le parti interne del processo erano impazzite.Il modo migliore per verificarlo è controllare /var/log/syslog (e dmesg) per vedere se qualcosa non va, ad esempio "BUG:impossibile gestire la dereferenziazione del puntatore NULL del kernel a 0000000000000028",
L'altra volta che ho visto questo è quando init non è il "processo genitore del figlio per la maggior parte degli scopi" (citazione della pagina man effettiva).Ciò può accadere quando si utilizza la chiamata di sistema ptrace (che il programma strace utilizza internamente) per collegarsi a un processo.Ad esempio, mi sono trovato in una situazione in cui allego strace al processo figlio B.Alla fine, il processo B termina come fa il suo genitore (non sono sicuro in quale ordine).Il processo B appare quindi come uno zombie di proprietà di init.Tuttavia, il suo genitore "la maggior parte degli scopi" era in realtà il programma strace.Dopo aver ucciso lo strace, è stato raccolto il processo B