linux中如何查看系統io使用情況

參考:https://phpmianshi.com/?id=114

linux中查看IO的方法主要有下面幾種方法:

 

1. top   %wa    的含義是等待輸入輸出的CPU時間百分比,這個數字越高說明越多的CPU資源在等待I/O權限

top - 18:38:17 up 13:37,  2 users,  load average: 0.18, 0.35, 0.27
Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
Cpu(s): 13.8%us,  4.0%sy,  0.0%ni, 80.4%id,  1.3%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   3922696k total,  3681552k used,   241144k free,   378892k buffers
Swap:  2097148k total,    84536k used,  2012612k free,  1126236k cached

 

2. top可以查看一個整體的io情況,但是沒法定位那個磁盤出現io問題了,我們可以結合iostat查看

 

語法:iostat [ options ] [ <interval> [ <count> ] ]   interval 採樣間隔  count採樣次數  I/O statistics(輸入/輸出統計)的縮寫

options 說明:

-c CPU的使用情況,單獨顯示avg-cpu部分

-d 磁盤的使用情況,單獨顯示Device部分

-x  更詳細的io統計信息 在分析io瓶頸時,一般都會開啓-x選項

-k  以kB爲單位顯示

-m  以mB爲單位顯示

注意,第1次採樣信息與單獨執行iostat的效果一樣,爲從系統開機到當前執行時刻的統計信息。

 

iostat用於輸出CPU和磁盤I/O相關的統計信息,單獨執行iostat,顯示的結果爲從系統開機到當前執行時刻的統計信息

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.28    0.00    2.26    0.75    0.00   85.71

Device:   rrqm/s wrqm/s  r/s  w/s    rkB/s  wkB/s avgrq-sz avgqu-sz   await r_await w_await svctm  %util
vda     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
vdb     0.00  0.00   2.00  0.00    8.00  0.00  8.00   0.04     19.00  19.00  0.00  19.00   3.80
scd0     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

 

選項 說明
%user CPU在用戶態執行進程的時間百分比。
%nice CPU在用戶態模式下,用於nice操作,所佔用CPU總時間的百分比
%system CPU處在內核態執行進程的時間百分比
%iowait CPU用於等待I/O操作佔用CPU總時間的百分比
%steal 管理程序(hypervisor)爲另一個虛擬進程提供服務而等待虛擬CPU的百分比
%idle CPU空閒時間百分比

1. 若 %iowait 的值過高,表示硬盤存在I/O瓶頸 
2. 若 %idle 的值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量 

3. 若 %idle 的值持續低於1,則系統的CPU處理能力相對較低,表明系統中最需要解決的資源是 CPU

 

選項 說明
rrqm/s 每秒對該設備的讀請求被合併次數,文件系統會對讀取同塊(block)的請求進行合併
wrqm/s 每秒對該設備的寫請求被合併次數
r/s 每秒完成的讀次數
w/s 每秒完成的寫次數
rkB/s 每秒讀數據量(kB爲單位)
wkB/s 每秒寫數據量(kB爲單位)
avgrq-sz 平均每次IO操作的數據量(扇區數爲單位)
avgqu-sz 平均等待處理的IO請求隊列長度
await

平均每次IO請求等待時間(包括等待時間和處理時間,毫秒爲單位)

 一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了

svctm

平均每次IO請求的處理時間(毫秒爲單位)

如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好

如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。

%util

採用週期內用於IO操作的時間比率,即IO隊列非空的時間比率

例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%

所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了

平時我們主要關注這三個參數:await  svctm $util

 

3.我們更關注的是那個進程io出現了問題,這時候使用iotop查找

iotop

Actual DISK READ:       7.82 K/s | Actual DISK WRITE:      15.64 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND          
 3981 be/4 root        7.82 K/s    0.00 B/s  0.00 %  0.21 % YDService
29094 be/4 www         0.00 B/s   19.55 K/s  0.00 %  0.00 % nginx: wo~er process
29095 be/4 www         0.00 B/s   31.27 K/s  0.00 %  0.00 % nginx: wo~er process

 

4.查找哪個文件引起的I/Owait    

 

lsof -p 29093

 

可以查看哪些文件正在讀寫。

 

更多lsof用法參考:https://phpmianshi.com/?id=103

 

5.查看歷史io情況  比如查看11號的

 

sar -b -f  /var/log/sa11
sar -u -f /var/log/sa11
sar -d -f /var/log/sa11

 

更多sar用法參考:https://phpmianshi.com/?id=107

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章