Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
TASK_UNINTERRUPTIBLE Linux / DevOps

Траблшутинг зависания процессов в состоянии D-State (Uninterruptible Sleep) в Linux

Обновлено: 21.08.2026
  • Процессы находятся в статусе D в выводе ps/top и не завершаются по kill -9.
  • Аномальный рост показателя Load Average при низком использовании CPU.
  • В dmesg появляются сообщения INFO: task blocked for more than 120 seconds.
  • Зависание операций ввода-вывода с сетевыми хранилищами (NFS, Ceph, CIFS) или локальными дисками.

1. Идентификация зависших процессов

ps -eo pid,user,state,time,command | awk '$3 ~ /D/ {print $0}'

2. Анализ точки зависания в ядре

PID=12345
cat /proc/$PID/wchan
cat /proc/$PID/stack

3. Проверка блокировок и дискового I/O

iostat -xz 1 5
dmesg -T --level=err,warn | grep -Ei "timeout|blocked|hung_task|nfs|sd[a-z]"

4. Аварийная разблокировка

Если проблема связана с зависшей сетевой шарой, выполните отложенное принудительное размонтирование:

umount -f -l /mnt/remote_share

Если зависание вызвано блокировкой очереди dirty pages, принудительно сбросьте кэши:

sync
echo 3 > /proc/sys/vm/drop_caches
Практический опыт инженера: Процессы в D-state почти всегда указывают на аппаратные тайм-ауты контроллеров дисков или сетевые сбои NFS. Не пытайтесь перезапускать зависимые сервисы вслепую — сначала проверьте стек /proc/PID/stack.

Частые вопросы (FAQ)

Почему процесс в состоянии D невозможно убить через kill -9?

В состоянии TASK_UNINTERRUPTIBLE процесс ожидает ответа от системного вызова ядра или драйвера оборудования. До завершения вызова ядро намеренно игнорирует любые асинхронные сигналы (включая SIGKILL), чтобы не допустить повреждения внутренних структур данных.

Как принудительно вывести стек всех заблокированных задач?

Включите SysRq и отправьте триггер: echo 1 > /proc/sys/kernel/sysrq && echo w > /proc/sysrq-trigger. Трассировка появится в выводе dmesg.