task blocked for more than 120 seconds
Это сообщение означает, что процесс больше двух минут провёл в непрерываемом ожидании — обычно ожидании диска или сетевой файловой системы. Такой процесс нельзя убить даже жёстким сигналом, и остановка службы повисает. Причина почти всегда в подсистеме хранения, а не в самой службе.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Диск или хранилище не отвечают
Отказывающий носитель или перегруженное хранилище растягивает операции до минут. Процесс висит в ожидании и попадает в это сообщение.
-
Сетевая файловая система недоступна
Монтирование без возможности прерывания держит процессы в ожидании неограниченно долго.
-
Остановка службы повисает из-за зависшего процесса
systemd ждёт завершения, но процесс в непрерываемом ожидании не реагирует ни на один сигнал. Служба остаётся в состоянии остановки.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения о зависших процессах.
journalctl -k -b --no-pager | grep -iE "blocked for more than|hung_task" | tailПроцессы в непрерываемом ожидании и где именно они ждут.
ps -eo pid,stat,wchan:24,cmd | awk '$2 ~ /D/'Сетевые монтирования и их параметры.
findmnt -t nfs4,nfs,cifs -o TARGET,SOURCE,OPTIONSРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Отказывающий носитель или перегруженное хранилище растягивает операции до минут. Процесс висит в ожидании и попадает в это сообщение.
- Как проверить
-
Посмотрите ошибки ввода-вывода и очередь к дискам.
journalctl -k -b --no-pager | grep -iE "I/O error|ata[0-9]|nvme" | tail iostat -x 2 2 2>/dev/null | tail -12
- Как исправить
- Разбирайтесь с носителем: замена диска, разгрузка хранилища, проверка пути к нему. До этого служба будет повисать снова.
- Почему происходит
- Монтирование без возможности прерывания держит процессы в ожидании неограниченно долго.
- Как проверить
-
Посмотрите сетевые монтирования и параметры.
findmnt -t nfs4,nfs,cifs -o TARGET,SOURCE,OPTIONS
- Как исправить
- Монтируйте сетевые ресурсы с параметром, допускающим прерывание и таймаут, иначе любая сетевая заминка означает зависшие процессы.
- Почему происходит
- systemd ждёт завершения, но процесс в непрерываемом ожидании не реагирует ни на один сигнал. Служба остаётся в состоянии остановки.
- Как проверить
-
Посмотрите состояние процессов службы.
systemctl status myapp.service --no-pager | head -6 ps -o pid,stat,wchan:24,cmd -C myapp 2>/dev/null
- Как исправить
- Дождаться или снять причину ожидания. Уменьшать таймаут остановки бессмысленно: процесс в таком состоянии не убивается.
Пример вывода
Процесс службы висит в ожидании сетевой файловой системы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
kernel: INFO: task myapp:1200 blocked for more than 120 seconds.
kernel: Tainted: G OE 6.8.0-139-generic
kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kernel: task:myapp state:D stack:0 pid:1200 ppid:1 flags:0x00000000
Связанные ошибки
- Сетевой каталог подвисает: жёсткое монтирование NFS Обращение к каталогу NFS блокируется намертво: жёсткое монтирование без таймаутов. Как настроить устойчиво.
- A stop job is running: выключение висит Перезагрузка останавливается с обратным отсчётом: служба не завершается. Как найти и сократить ожидание.
- Input/output error в журнале службы Ошибка ввода-вывода: проблемы носителя, отвалившийся сетевой ресурс, повреждённая файловая система. Что проверять срочно.
- I/O error, dev sda, sector N: ошибка носителя Ядро сообщает об ошибке чтения или записи на устройстве. Что делать со службой и данными.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Hardware Error / EDAC: ошибки памяти в журнале Ядро сообщает об ошибках памяти. Что считать безобидным, а что поводом менять модуль.
Источники
- Документация ядра: обнаружение зависших задач
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено остановкой сервера сетевой файловой системы при активной записи.