① 如何查看磁碟性能linux怎麼看磁碟io佔用情況
在本文中,我們來看看磁碟的性能指標以及如何查看這些指標。
Linux 磁碟性能指標
在衡量磁碟性能時,我們經常提到五個常見指標:利用率、飽和度、IOPS、吞吐量和響應時間。這五個指標是衡量磁碟性能的基本指標。
利用率(Utilization):磁碟處理 I/O 的時間百分比。過度使用(如超過 80%)通常意味著磁碟 I/O 存在性能瓶頸。
飽和度(Saturation):指磁碟處理 I/O 的繁忙程度。過度飽和意味著磁碟存在嚴重的性能瓶頸。當飽和度為 100% 時,磁碟無法接受新的 I/O 請求。
IOPS(Input/Output Per Second):指每秒 I/O 請求的數量。
吞吐量(Throughput):每秒 I/O 請求的大小。
響應時間(Response time):指發送 I/O 請求和接收響應之間的間隔時間。
這里需要注意的是,關於利用率,我們只考慮有無 I/O,而不考慮 I/O 的大小。也就是說,當利用率為 100% 時,磁碟仍有可能接受新的 I/O 請求。
一般來說,在為應用選擇伺服器時,首先要對磁碟的 I/O 性能進行基準測試,這樣才能准確評估磁碟性能,以判斷是否能夠滿足應用的需求。
當然,這需要你在隨機讀、順序讀、隨機寫、順序寫等各種應用場景下測試不同 I/O 大小(通常是 512B ~ 1MB 之間)的性能。
磁碟 I/O 觀察
首先要觀察的是每個磁碟的使用情況。iostat 是最常用的磁碟 I/O 性能觀察工具。它提供了各種常用性能指標,例如每個磁碟的利用率、IOPS和吞吐量。當然,這些指標實際上來自/proc/diskstats。
以下是iostat的輸出示例:
# -d -x means display all disk I/O performance$ iostat -d -x 1Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %utilloop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00loop1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
在上述指標中,您需要注意的是:
%util是我們前面提到的磁碟 I/O 使用情況
r/s和w/s是 IOPS
rkB/s和wkB/s是吞吐量
r_await和w_await是響應時間
您可能已經注意到iostat不能直接獲取磁碟的飽和度。事實上,通常沒有什麼簡單的方法可以測量飽和度。但是,您可以將觀察到的平均請求隊列長度或完成讀寫請求的等待時間與基準測試(例如通過 fio)的結果進行比較,以綜合評估磁碟飽和度。
進程 I/O 觀察
除了每個磁碟的 I/O 情況,每個進程的 I/O 情況也是大家關注的重點。
上面提到的iostat只提供了觀察磁碟的整體 I/O 性能數據。缺點是無法知道哪些進程正在讀寫磁碟。要觀察進程的 I/O,還可以使用pidstat和iotop工具。
例如,要使用pidstat
$ pidstat -d 1 13:39:51 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command13:39:52 102 916 0.00 4.00 0.00 0 rsyslogd
從pidstat的輸出可以看出,它可以實時查看每個進程的 I/O 情況,這包括以下內容:
用戶 ID (UID) 和進程 ID (PID)。
每秒讀取的數據大小 (kB_rd/s),以 KB 為單位。
每秒發出的寫請求數據的大小(kB_wr/s),單位為KB。
每秒取消寫入請求的數據大小 (kB_ccwr/s),以 KB 為單位。
塊 I/O 延遲 (iodelay),包括等待同步塊(synchronized block)I/O 和換入塊(swap-in block)I/O 完成的時間,以時鍾周期為單位。
除了使用pidstat實時查看進程磁碟 I/O 外,還有一個磁碟性能分析的常用方法是根據 I/O 大小對進程進行排序。為此,我推薦iotop工具。它是一個類似於top的工具,您可以按 I/O 大小對進程進行排序,並找到具有更大 I/O 的進程。
$ iotopTotal DISK READ : 0.00 B/s | Total DISK WRITE : 7.85 K/sActual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND15055 be/3 root 0.00 B/s 7.85 K/s 0.00 % 0.00 % systemd-journald
從該輸出可以看到,前兩行分別代表進程的磁碟讀寫總大小和磁碟的實際讀寫總大小。由於緩存、緩沖區、I/O 合並等因素,它們可能不相等。
剩下的部分從各個角度代表了進程的 I/O 情況,包括 線程 ID、I/O 優先順序、每秒磁碟讀取大小、每秒磁碟寫入大小、換入百分比和等待 I/O 時鍾百分比。
結論
在本文中,我介紹了 Linux 磁碟 I/O 的性能指標和查看性能工具。我們通常使用 IOPS、吞吐量、利用率、飽和度和響應時間等幾個指標來評估磁碟的 I/O 性能。
可以使用iostat獲取磁碟的 I/O 情況,也可以使用pidstat、iotop等觀察進程的 I/O 情況。但在分析這些性能指標時,要注意結合讀寫比率、I/O 類型、I/O 大小等綜合分析。
鏈