全部產品
Search
文件中心

Alibaba Cloud Linux:檢測檔案系統和塊層的IO hang

更新時間:Jul 17, 2024

IO hang是指在系統運行過程中,因某些IO耗時過長而引起的系統不穩定甚至宕機。為了準確檢測出IO hang,Alibaba Cloud Linux 2和Alibaba Cloud Linux 3擴充核心資料結構,增加了在較小的系統開銷下,快速定位並檢測IO hang的功能。本文主要介紹實現該功能的介面以及介面操作樣本。

介面說明

介面

描述

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

該介面能夠查看和修改用於檢測IO hang的閾值,單位為ms,預設值為5000。

/sys/block/<device>/hang

該介面能夠輸出對應裝置上超過IO hang閾值的讀寫IO個數。

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

該介面能夠擷取IO hang的詳細資料。

/proc/<pid>/wait_res

該介面能夠擷取進程正在等待的資源資訊。

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

該介面能夠擷取線程正在等待的資源資訊。

以上介面中變數說明如下。

變數名

說明

<device>

Block Storage裝置名稱。

<pid>

進程ID。

<tid>

線程ID。

樣本一

您可以根據需求調用介面/sys/block/<device>/queue/hang_threshold修改用於檢測IO hang的閾值。本樣本中將預設閾值5000 ms修改為10000 ms。

  1. 將磁碟vdb下的用於檢測IO hang的閾值修改為10000 ms。

    echo 10000 > /sys/block/vdb/queue/hang_threshold
  2. 查看修改結果。

    cat /sys/block/vdb/queue/hang_threshold

    返回結果樣本。

    10000

樣本二

您可以調用介面/sys/block/<device>/hang查詢磁碟上產生IO hang的讀寫IO個數。本樣本查詢的磁碟為vdb

查詢命令如下。

cat /sys/block/vdb/hang

返回結果樣本。

0        1     # 左邊參數表示產生IO hang的讀IO的個數,右邊參數表示產生IO hang的寫IO的個數

樣本三

您可以調用介面/sys/kernel/debug/block/<device>/rq_hang擷取產生IO hang的詳細資料。本樣本中的磁碟為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 }}

上述樣本顯示了IO的詳細資料,從資訊中擷取到IO請求開始時間io_start_time_ns已被賦值。表明該IO請求未被及時處理,從而導致IO耗時過長。

樣本四

您可以調用介面/proc/<pid>/wait_res擷取進程正在等待的資源資訊。本樣本所查詢的進程ID為577

查詢命令如下。

cat /proc/577/wait_res

返回結果樣本。

1 0000000000000000 4310058496 4310061448    #樣本值依次對應Field 1 Field 2 Field 3 Field 4

返回結果樣本中參數說明如下。

參數

說明

Field 1

等待的資源類型。1表示檔案系統中的快取頁面(page),2表示塊層bio。

Field 2

等待的資源(page/bio)地址。

Field 3

等待資源開始時間。

Field 4

讀取該檔案的目前時間,與Field 3的差值即為在該資源上等待的耗時。