Tengo un proceso que varias veces ha dejado de responder y parece estar de cierre por completo. No responde a cualquier intento de strace o se asoma con gdb (BGF sólo cuelga de una llamada al sistema wait4 ()). El proceso es ejecutable, y no está esperando en una syscall (/ proc / X / syscall: running
) o en el sueño ininterrumpible (/ proc / X / estado: State: R (running)
).
¿En qué estado se encuentra este proceso exactamente? ¿Es esto posiblemente un error del kernel de algún tipo?
El proceso es redis, y esto ha sucedido algunas veces ahora. Parece que lo único que puede matar el proceso es un reinicio. El sistema operativo es Cent 7.
Editar: la versión del kernel es 3.10.0-123.13.2.el7.x86_64. Intentando actualizar a 3.10.0-229.11.1.el7 para ver si eso hace alguna diferencia.
fuente
dmesg
salida?/proc/<pid>/stack
(y/proc/<pid>/task/*/stack
)? ¿Ese proceso tiene varios hilos?Respuestas:
wait4 es una llamada al sistema indicando que el proceso está esperando por uno de su cese niño. Esto puede indicar algún problema con el manejo de la señal.
Un poco brutal, pero puede tratar de matar a la jerarquía de la aplicación:
kill -15 -$YourRedisPID
. El - antes del PID significa "el PID y sus hijos". Por lo que parece estar esperando a una terminación niño, puede desbloquearlo.Si no funciona, revisemos más a fondo: encuentre el estado de su proceso de señal con
grep ^Sig /proc/$YourRedisPID/status
Verás algunas cosas como:
Como se define en "fs / proc / array.c" de la fuente del núcleo, el "SigQ" es el número de señales pendientes / el límite de señales pendientes.
Si el número de señal es demasiado alto, puede indicar que su "SIGKILL" no se maneja en absoluto. Todavía estoy revisando el archivo "kernel / signal.c" para comprender la gestión de la señal de estas señales especiales.
Para una comprensión directa de la salida, intente esta línea:
awk 'BEGIN{print "ibase=16;obase=2;"} /^Sig...:/{ print toupper($2)}' /proc/$YourRedisPID/status | BC_LINE_LENGTH=0 bc
Esto me da salida:
Vamos a empezar por el envío de esta salida. Voy a actualizar el registro según se requiera.
fuente