web-dev-qa-db-ja.com

スタックした「D」ステータスプロセスの原因を特定する方法

enter image description here

複数のプロセスが割り込み不可能なスリープステータスでスタックしています。すべてのプロセスはauplink /var/lib/docker/aufs/mnt。それは何かDockerに関連していて、決して完了しないI/Oを待っています-私はそれを得ますが、正確な原因をどのように判断しますか?待機しているI/Oを知るにはどうすればよいですか?また、ハードリブートなしでこれらのスタックしたプロセスをなくす方法は本当にありませんか?

1
l46kok

あなたはプロセスのスタックを見ることができます:

cat /proc/<process pid>/stack

d-stateになったときに何をしていたかについての情報を提供します。

echo w > /proc/sysrq-trigger; dmesg

カーネルに、dmesgバッファー内のD状態プロセスのすべてのスタックトレースを報告するように指示します。

D状態のプロセスは強制終了できません。プロセスが長期間D状態のままであるが、ときどきI/Oが終了し、短時間中断され、その後同じI/Oアクティビティに戻って、再びD状態になる状況があります。次に

while (true); do kill -9 PID; done

プロセスが中断されている間、KILLシグナルを送信する可能性はほとんどありません。

1
arekm