すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Linux:ファイルシステムとブロック層の I/O ハングを検出する

最終更新日:Sep 01, 2025

I/O ハングは、時間のかかる I/O リクエストが原因でシステムが不安定になったり、ダウンしたりした場合に発生します。 I/O ハングを正確に検出するために、Alibaba Cloud Linux 2 と Alibaba Cloud Linux 3 はコアデータ構造を拡張し、低いシステムオーバーヘッドで I/O ハングを識別および検出できる機能を提供します。 このトピックでは、この機能のインターフェイスとインターフェイスの使用例について説明します。

インターフェイスの説明

インターフェイス

説明

/sys/block/<device>/queue/hang_threshold

このインターフェイスを使用すると、I/O ハングのしきい値をクエリおよび変更できます。 しきい値の単位:ミリ秒。 デフォルト値:5000。

/sys/block/<device>/hang

このインターフェイスを使用すると、デバイスで I/O ハングのしきい値を超えた I/O 操作の数をクエリできます。

/sys/kernel/debug/block/<device>/rq_hang

このインターフェイスを使用すると、I/O ハングの詳細をクエリできます。

/proc/<pid>/wait_res

このインターフェイスを使用すると、プロセスが待機しているリソースに関する情報をクエリできます。

/proc/<pid>/task/<tid>/wait_res

このインターフェイスを使用すると、スレッドが待機しているリソースに関する情報をクエリできます。

次の表は、上記のインターフェイスの変数を示しています。

変数

説明

<device>

ブロックストレージデバイスの名前。

<pid>

プロセスの ID。

<tid>

スレッド ID。

例 1

/sys/block/<device>/queue/hang_threshold インターフェイスを呼び出して、I/O ハングのしきい値を変更できます。 この例では、しきい値は 5,000 ミリ秒から 10,000 ミリ秒に変更されます。

  1. vdb ディスクの I/O ハングのしきい値を 10,000 ミリ秒に変更します。

    echo 10000 > /sys/block/vdb/queue/hang_threshold
  2. 変更結果を表示します。

    cat /sys/block/vdb/queue/hang_threshold

    出力例:

    10000

例 2

/sys/block/<device>/hang インターフェイスを呼び出して、ディスクで I/O ハングを引き起こす I/O 操作の数をクエリできます。 この例では、vdb ディスクが使用されます。

コマンド例:

cat /sys/block/vdb/hang

出力例:

0        1     # 左側の値は、I/O ハングを引き起こす読み取り操作の数を示します。 右側の値は、I/O ハングを引き起こす書き込み操作の数を示します。

例 3

/sys/kernel/debug/block/<device>/rq_hang インターフェイスを呼び出して、I/O ハングの詳細をクエリできます。 この例では、vdb ディスクが使用されます。

コマンド例:

cat /sys/kernel/debug/block/vdb/rq_hang

出力例:

ffff9e50162fc600 {.op=WRITE, .cmd_flags=SYNC, .rq_flags=STARTED|ELVPRIV|IO_STAT|STATS, .state=in_flight, .tag=118, .internal_tag=67, .start_time_ns=1260981417094, .io_start_time_ns=1260981436160, .current_time=1268458297417, .bio = ffff9e4907c31c00, .bio_pages = { ffffc85960686740 }, .bio = ffff9e4907c31500, .bio_pages = { ffffc85960639000 }, .bio = ffff9e4907c30300, .bio_pages = { ffffc85960651700 }, .bio = ffff9e4907c31900, .bio_pages = { ffffc85960608b00 }}

上記の出力は、I/O 操作の詳細を示しています。 io_start_time_ns は I/O リクエストの開始時刻を示し、このパラメーターには値が割り当てられています。 これは、I/O リクエストがタイムリーに処理されなかったことを示しており、I/O 時間が長くなります。

例 4

/proc/<pid>/wait_res インターフェイスを呼び出して、プロセスが待機しているリソースに関する情報をクエリできます。 この例では、577 プロセスが使用されます。

コマンド例:

cat /proc/577/wait_res

出力例:

1 0000000000000000 4310058496 4310061448    # 1 はフィールド 1 の値、0000000000000000 はフィールド 2 の値、4310058496 はフィールド 3 の値、4310061448 はフィールド 4 の値です。

次の表は、出力例の各パラメーターを示しています。

パラメーター

説明

フィールド 1

プロセスが待機しているリソースの種類。 値 1 は、ファイルシステム内のキャッシュページを示します。 値 2 は、ブロック I/O 層を示します。

フィールド 2

プロセスが待機しているリソース(キャッシュページまたはブロック I/O 層)のアドレス。

フィールド 3

プロセスがリソースの待機を開始した時刻。

フィールド 4

ファイルが読み取られている現在の時刻。 フィールド 4 とフィールド 3 の差は、プロセスがリソースを待機するのにかかった時間です。