У меня есть процесс, который несколько раз перестал отвечать и, кажется, полностью блокируется. Он не реагирует ни на одну из попыток выполнить strace или просмотр с помощью gdb (gdb просто висит на системном вызове wait4 ()). Процесс работает и не ожидает системного вызова (/ proc / X / syscall:) running
или непрерывного сна (/ proc / X / status :) State: R (running)
.
В каком состоянии находится этот процесс? Возможно, это ошибка ядра какого-то типа?
Процесс повторяется, и это уже происходило несколько раз. Кажется, единственная вещь, которая может убить процесс - это перезагрузка. ОС Cent 7.
Изменить: Ядро версии 3.10.0-123.13.2.el7.x86_64. Попытка обновления до 3.10.0-229.11.1.el7, чтобы увидеть, если это имеет какое-либо значение.
process
linux-kernel
redis
alienth
источник
источник
dmesg
выходе?/proc/<pid>/stack
(и/proc/<pid>/task/*/stack
) содержится? У этого процесса есть несколько потоков?Ответы:
wait4 - системный вызов, указывающий, что процесс ожидает завершения одного из его дочерних процессов. Это может указывать на некоторые проблемы с обработкой сигнала.
Немного жестоко, но вы можете попытаться убить иерархию из приложения:
kill -15 -$YourRedisPID
. - до PID означает «PID и его детей». Так как кажется, что он ждет завершения ребенка, он может разблокировать его.Если это не работает, давайте проверим глубже: найдите свой статус обработки сигналов с помощью
grep ^Sig /proc/$YourRedisPID/status
Вы увидите такие вещи, как:
Как определено в «fs / proc / array.c» источника ядра, «SigQ» - это количество ожидающих сигналов / предел ожидающих сигналов.
Если количество сигнала слишком велико, это может означать, что ваш «SIGKILL» вообще не обрабатывается. Я все еще проверяю файл «kernel / signal.c», чтобы понять управление сигналами этих специальных сигналов.
Для непосредственного понимания вывода, попробуйте этот однострочный:
awk 'BEGIN{print "ibase=16;obase=2;"} /^Sig...:/{ print toupper($2)}' /proc/$YourRedisPID/status | BC_LINE_LENGTH=0 bc
Это выводит меня:
Давайте начнем с отправки нам этого вывода. Я буду обновлять пост по мере необходимости.
источник