
私のカーネルログには次のメッセージがありますINFO: task XXX blocked for more than 120 seconds
。これが技術的に何を意味するのか疑問に思います。カーネルはどのような条件下でタスクに関するメッセージを表示しますか?
記録上で私がブロックした作業はですがmultipathd
、このエラーの一般的な意味にも興味があります。
答え1
ジョブがブロックされたら、リソースが再利用できるまで待ちます。
あなたの場合、IOの問題やディスク領域の競合があるかもしれません。または、システムの負荷が高すぎるため、タイムリーなタスクを完了するのに十分なCPUパフォーマンスがありません。
非常に忙しい時に作業を開始しようとすると、cronにこのエラーが表示されます。
答え2
デフォルトでは、このロギングは、CPUスケジューラが特定の時間内にプロセスに切り替えず、プロセスが例外条件を満たさない場合にトリガされます。
例外は、プロセスへの移行は発生しませんでしたが、プロセスを記録してはならない特別なケースです。例外条件は明確ではありません。コード内のこれらの条件の説明は次のとおりです。
Also, skip vfork and any other user process that freezer should skip.
Also, when a freshly created task is scheduled once, changes
its state to TASK_UNINTERRUPTIBLE without having ever been
switched out once, it musn't be checked.
(check_hung_task()
Linuxからhung_task.c
)
https://elixir.bootlin.com/linux/v5.12.12/source/kernel/hung_task.c#L92
ジョブが長い間予約されていない理由は、I / Oが完了するのを待っている間は常にTASK_UNINTERRUPTABLE( ' D
'状態top
)にある可能性がありますが、他の人はそうできないと思います。他に何を知ってください。