Actuellement en cours top
sur mon LVM Linux, je vois 82 zombies. Puis, après une heure, je vois 128 zombies. Je comprends que les zombies sont inoffensifs, mais à partir de quand sont-ils trop nombreux ? Peuvent-ils commencer à causer des problèmes ?
Réponse
Trop de publicités?Ils ne causeront pas de problèmes sérieux à moins qu'ils ne commencent à se multiplier à un rythme plus rapide.
Cet article est une bonne lecture :
- Qu'est-ce qu'un "processus zombie" sous Linux ?
Les zombies sont en fait les restes de processus morts qui n'ont pas été nettoyés correctement. Un programme qui crée des processus zombies n'est pas programmé correctement - les programmes ne sont pas censés laisser les processus zombies processus zombies rester dans les parages.
Qu'est-ce qu'un processus zombie ?
Pour comprendre ce qu'est un processus zombie et ce qui provoque l'apparition de processus zombies, vous devez comprendre un peu comment les processus fonctionnent sous Linux.
Lorsqu'un processus meurt sous Linux, il n'est pas immédiatement supprimé de la mémoire - son descripteur de processus reste en mémoire (le descripteur de processus ne prend qu'une petite quantité de mémoire). Le statut du processus devient EXIT_ZOMBIE et le parent du processus est notifié de la mort de son processus enfant par le signal SIGCHLD. Le processus parent est alors censé exécuter l'appel système wait() pour lire l'état de sortie du processus mort et d'autres informations. Cela permet au processus parent d'obtenir des informations du processus mort. Après l'appel de wait(), le processus zombie est complètement supprimé de la mémoire.
Cela se produit normalement très rapidement, de sorte que vous ne verrez pas de processus zombies s'accumuler sur votre système. Cependant, si un processus parent n'est pas programmé correctement et n'appelle jamais wait(), ses enfants zombies resteront en mémoire jusqu'à ce qu'ils soient nettoyés.
Des utilitaires comme GNOME System Monitor, la commande top et la commande ps affichent les processus zombies.
Les dangers des processus zombies
Les processus zombies ne consomment pas de ressources système. (En fait, chacun d'entre eux utilise une très petite quantité de mémoire système pour stocker son descripteur de processus). Cependant, chaque processus zombie conserve son ID de processus (PID). Les systèmes Linux ont un nombre fini d'ID de processus - 32767 par défaut sur les systèmes 32 bits. Si les zombies s'accumulent à un rythme très rapide - par exemple, si un logiciel serveur mal programmé crée des processus zombies sous la charge - l'ensemble des PIDs disponibles seront finalement assignés à des processus zombies, empêchant le lancement d'autres processus.
Cependant, quelques processus zombies qui traînent ne posent aucun problème, même s'ils indiquent un problème avec leur processus parent sur votre système.
Se débarrasser des processus zombies
Vous ne pouvez pas tuer les processus zombies comme vous pouvez tuer les processus normaux avec le signal SIGKILL - les processus zombies sont déjà morts. Gardez à l'esprit que vous n'avez pas besoin de vous débarrasser des processus zombies, sauf si vous en avez un grand nombre sur votre système - quelques zombies sont inoffensifs. Cependant, il existe quelques moyens de se débarrasser des processus zombies.
L'un des moyens consiste à envoyer le signal SIGCHLD au processus parent. Ce signal indique au processus parent d'exécuter l'appel système wait() et de nettoyer ses enfants zombies. Envoyez le signal avec la commande kill, en remplaçant pid dans la commande ci-dessous par le PID du processus parent :
kill -s SIGCHLD pid
Cependant, si le processus parent n'est pas programmé correctement et ignore les signaux SIGCHLD, cela ne servira à rien. Vous devrez tuer ou fermer le processus parent des zombies. Lorsque le processus qui a créé les zombies se termine, init hérite des processus zombies et devient leur nouveau parent. (init est le premier processus lancé sur Linux au démarrage et se voit attribuer le PID 1.) init exécute périodiquement l'appel système wait() pour nettoyer ses enfants zombies, donc init se chargera rapidement des zombies. Vous pouvez redémarrer le processus parent après l'avoir fermé.
Si un processus parent continue à créer des zombies, il doit être corrigé afin qu'il appelle correctement wait() pour récolter ses enfants zombies. Déposez un rapport de bogue si un programme sur votre système continue à créer des zombies.