INFO: task blocked for more than 120 seconds — Решение зависания процессов (D-state)
Архитектура ошибки и симптомы сбоя
Сообщение «INFO: task blocked for more than 120 seconds (D-state hung task)» генерируется сторожевым процессом ядра khungtaskd. Ошибка указывает на то, что процесс перешел в состояние D (Uninterruptible Sleep / Беспрерывный сон) в ожидании ресурса ввода-вывода (I/O), дискового семафора или сетевого ответа NFS/iSCSI и не меняет статус свыше 120 секунд. Процессы в состоянии 'D' невозможно принудительно завершить даже сигналом kill -9.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| D-State (TASK_UNINTERRUPTIBLE) | Process Flag | Процесс ожидает завершения дискового или аппаратного I/O вызова в ядре. |
| kernel.hung_task_timeout_secs | 120 (default) | Таймаут в секундах, после которого ядро считает задачу зависшей. |
| Trigger Source | Disk / SAN / NFS / Lock | Задержки в дисковой подсистеме, деградация RAID, таймауты сетевых файловых систем. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Локализация зависшего системного вызова
Определите, какую именно операцию ввода-вывода или блокировку ожидает зависший процесс:
# Поиск процессов в состоянии 'D':
ps aux | awk '$8 ~ /D/'
# Просмотр стека ожидания конкретного процесса (замените PID):
cat /proc/<PID>/stack
cat /proc/<PID>/wchanСценарий 2: Оптимизация сброса грязных страниц (Dirty Pages)
Часто зависание вызывается тем, что ядро блокирует процессы на время сброса гигабайтов кэша на медленный накопитель:
# Снижение порогов сброса буферов на диск:
sudo sysctl -w vm.dirty_background_ratio=5
sudo sysctl -w vm.dirty_ratio=10
# Фиксация в /etc/sysctl.d/99-io.conf:
cat <<EOF | sudo tee -a /etc/sysctl.d/99-io.conf
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
EOF
sudo sysctl -p /etc/sysctl.d/99-io.confСценарий 3: Проверка состояния сетевых ФС (NFS / CIFS / iSCSI)
Если в стеке фигурируют функции nfs_wait_bit_uninterruptible или rpc_wait_bit_killable, монтируйте NFS-шары с параметрами soft,timeo=50,retrans=2 вместо жесткого hard монтирования, чтобы исключить глухой deadlock процессов при сетевых сбоях.
ITSTM выполнит комплексный аудит производительности дисковых массивов (iostat/fio), оптимизирует I/O шедулеры и устранит «бутылочные горлышки» в инфраструктуре.
Частые вопросы (FAQ)
Почему команду kill -9 нельзя применить к процессу в D-state?
В состоянии TASK_UNINTERRUPTIBLE процесс находится глубоко внутри системного вызова ядра и не обрабатывает сигналы ОС до тех пор, пока драйвер оборудования не вернет результат операции.
Приводит ли это сообщение к аварийной перезагрузке ОС?
По умолчанию нет — ядро только выводит предупреждение в dmesg. Однако если включен параметр kernel.hung_task_panic=1, система принудительно уйдет в Kernel Panic.