J'ai un processus qui à plusieurs reprises a cessé de répondre et semble se bloquer complètement. Il ne répond à aucune tentative de strace ou de lecture avec gdb (gdb se bloque simplement sur un syscall wait4 ()). Le processus est exécutable et n'attend pas un appel système (/ proc / X / syscall:) running
ou en veille ininterrompue (/ proc / X / status :) State: R (running)
.
Dans quel état se trouve ce processus exactement? Est-ce peut-être un bug du noyau d'un certain type?
Le processus est redis, et cela s'est produit plusieurs fois maintenant. La seule chose qui peut tuer le processus est un redémarrage, semble-t-il. OS est Cent 7.
Edit: la version du noyau est 3.10.0-123.13.2.el7.x86_64. Essayer une mise à jour vers 3.10.0-229.11.1.el7 pour voir si cela fait une différence.
la source
dmesg
sortie?/proc/<pid>/stack
(et/proc/<pid>/task/*/stack
) contient? Ce processus a-t-il plusieurs fils?Réponses:
wait4 est un appel système indiquant que le processus attend la terminaison d'un de ses enfants. Cela peut signaler un problème avec la gestion du signal.
Un peu brutal, mais vous pouvez essayer de tuer la hiérarchie de l'application:
kill -15 -$YourRedisPID
. Le - avant le PID signifie "le PID et ses enfants". Comme il semble attendre la fin d'un enfant, il peut le déverrouiller.Si cela ne fonctionne pas, vérifions plus en profondeur: trouvez l'état de votre processus de signal avec
grep ^Sig /proc/$YourRedisPID/status
Vous verrez des trucs comme:
Comme défini dans "fs / proc / array.c" de la source du noyau, le "SigQ" est le nombre de signaux en attente / la limite des signaux en attente.
Si le nombre de signaux est trop élevé, cela peut indiquer que votre "SIGKILL" n'est pas géré du tout. Je vérifie toujours le fichier "kernel / signal.c" pour comprendre la gestion du signal de ces signaux spéciaux.
Pour une compréhension directe de la sortie, essayez ce one-liner:
awk 'BEGIN{print "ibase=16;obase=2;"} /^Sig...:/{ print toupper($2)}' /proc/$YourRedisPID/status | BC_LINE_LENGTH=0 bc
Cela me produit:
Commençons par nous envoyer cette sortie. Je mettrai à jour le message au besoin.
la source