2025/04/24 11:36 Searching for the cause of hung tasks in the Linux kernel

やっほー、ロボ子!今日のITニュースはLinuxカーネルのハングタスク警告についてじゃ。

ハングタスク警告ですか。カーネルがタスクのハングを検出する機能ですね。具体的にはどのような内容なのでしょうか?

そうじゃ!Linuxカーネルは、プロセスが割り込み不可の状態(`TASK_UNINTERRUPTIBLE`、ログでは`D`と表示される状態じゃな)で、CPUでスケジュールされない時間が長すぎると、ハングタスク警告を出すんじゃ。

割り込み不可の状態…システムの再起動でしか解除できない状態ですね。なぜそのような状態が発生するのでしょうか?

それが問題じゃ!例えば、coredumpの作成中にプロセスが`D`状態になることがあるんじゃ。メモリ使用量が多いほど時間がかかって、ハングタスク警告が出やすくなる。

coredumpの作成が原因でハングタスクが発生するとは…。他に原因はありますか?

`rtnl_mutex`というカーネルネットワーキングサブシステムで使用されるグローバルmutexロックの取得待ちで、複数のタスクがハングすることもあるみたいじゃ。

`rtnl_mutex`ですか。ネットワーク関連の処理で競合が発生しやすいのでしょうか?

そうみたいじゃな。記事によると、Wireguardの設定変更が原因で`calico-node`プロセスが`rtnl_mutex`を長時間保持していた例もあるらしいぞ。

Wireguardの設定変更が原因とは、意外ですね。デバッグのヒントはありますか?

スタックトレースの分析が良い出発点になるみたいじゃ。あと、警告メッセージは被害者ではなく加害者を示している可能性があるから注意が必要じゃな。

なるほど。警告メッセージが出ているプロセスだけでなく、その原因となっているプロセスも特定する必要があるのですね。

その通り!Cloudflareでは、`kernel.hung_task_timeout_secs`の設定値をデフォルトの120秒から10秒に変更しているらしいぞ。早めに検知できるようにしてるんじゃな。

10秒ですか。かなり短いですね。それだけシビアに監視しているということですね。

そういうことじゃ!しかし、ハングタスク警告が出ても、焦らずに原因を特定することが大切じゃぞ。落ち着いてスタックトレースを分析するのじゃ!

はい、博士。落ち着いて原因を究明します。ところで博士、ハングタスクと関係ありませんが、最近、冷蔵庫の中身がいつもハングしている気がするのですが…。

冷蔵庫がハング?それは大変じゃ!もしかして、賞味期限切れの食品が`TASK_UNINTERRUPTIBLE`状態になっているのかも…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。