linux-磁盤相關命令

iostatios

       iostat主要用於監控系統設備的IO負載狀況、IO統計工具,iostat首次運行時顯示自系統啓動開始的各項統計信息,以後運行iostat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。express

[root@localhost app]# yum list|grep iostat
pcp-import-iostat2pcp.x86_64                3.11.8-7.el7               base   
[root@localhost app]# yum -y install pcp-import-iostat2pcp
[root@localhost app]# iostat
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 	10/24/2017 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.44    0.00    0.30    0.04    0.00   99.22

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.43         9.55        14.19     737417    1095615
scd0              0.00         0.00         0.00         44          0

[root@localhost app]#

各個輸出項目的含義以下:緩存

avg-cpu段:整體cpu使用狀況統計信息,對於多核cpu,這裏爲全部cpu的平均值bash

    %user: 在用戶級別運行所使用的CPU的百分比.服務器

    %nice: nice操做所使用的CPU的百分比.併發

    %sys: 在系統級別(kernel)運行所使用CPU的百分比.app

    %iowait: CPU等待硬件I/O時,所佔用CPU百分比.它指示cpu用於等待io請求完成的時間,主要看iowait的值。%iowait並不能反應磁盤瓶頸,iowait實際測量的是cpu時間: %iowait = (cpu idle time)/(all cpu time)dom

    %idle: CPU空閒時間的百分比.小於70% IO壓力就較大了,通常讀取速度有較多的wait。ide

Device段:各磁盤設備的IO統計信息函數

    tps:每秒進程下發的IO讀、寫請求數量,該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合併爲"一次I/O請求"。"一次傳輸"請求的大小是未知的。

    kB_read/s:每秒從設備(drive expressed)讀取的block數據量(一扇區爲512bytes),單位爲K;

    kB_wrtn/s:每秒向設備(drive expressed)寫入的block數據量,單位爲K

    kB_read:讀取的block總數據量,單位爲K

    kB_wrtn:寫入的block總數量數據量,單位爲K


語法

    iostat [options] [interval [count]]

參數

       -d [facility]表示,顯示設備(磁盤)使用狀態,默認監控全部的硬盤設備,能夠指定某一設備,如-d sda。;

       -k某些使用block爲單位的列強制使用Kilobytes爲單位,默認單位塊

       -m 某些使用block爲單位的列強制使用MB爲單位,默認單位塊

[root@localhost app]# iostat -d -k 1 3  #沒1秒一次 刷新3次磁盤的使用狀態
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 	10/25/2017 	_x86_64(1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
fd0               0.00         0.00         0.00          4          0
sda               0.26         4.66         7.25     746585    1161425
scd0              0.00         0.00         0.00         44          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
fd0               0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
fd0               0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

[root@localhost app]# iostat -d -k 1 
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 	10/25/2017 	_x86_64(1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
fd0               0.00         0.00         0.00          4          0
sda               0.26         4.66         7.25     746585    1161490
scd0              0.00         0.00         0.00         44          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
fd0               0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

^C
[root@localhost app]# iostat -d sda 1 4
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 	10/25/2017 	_x86_64(1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.26         4.66         7.25     746585    1161502

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.01         0.00         1.01          0          1

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

[root@localhost app]#

-x 顯示和io相關的擴展數據

[root@localhost app]# iostat -d sda -x -k 1 1
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 	10/25/2017 	_x86_64_	(1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.02     0.11    0.12    0.14    0 4.62     7.19    90.47     0.01   26.45   11.86   38.50   2.43   0.06

[root@localhost ~]# iostat -x
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain) 	01/09/2018 	_x86_64_	(8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.02    0.00    0.00   99.92

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.19     0.20     1.72    19.47     0.00    0.42    2.51    0.36   0.37   0.01

[root@localhost ~]#

rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用須要讀取數據的時候,VFS將請求發到各個FS,若是FS發現不一樣的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge);

wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。

rsec/s:每秒讀取的扇區數;

wsec/:每秒寫入的扇區數。

rKB/s:The number of read requests that were issued to the device per second,單位爲K

wKB/s:The number of write requests that were issued to the device per second,單位爲K;

r/s 和 w/s 分別是每秒的讀操做和寫操做,而rKB/s 和wKB/s 列以每秒千字節爲單位顯示了讀和寫的數據量 若是這兩對數據值都很高的話說明磁盤io操做是很頻繁。

avgrq-sz 平均請求扇區的大小,單位是扇區

avgqu-sz 是平均請求隊列的長度。毫無疑問,隊列長度越短越好。    

await:  每個IO請求的處理的平均時間(單位是毫秒),這裏能夠理解爲IO的響應時間,通常地系統IO響應時間應該低於5ms,若是大於10ms就比較大了。

              這個時間包括了隊列時間和服務時間,也就是說,通常狀況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。

svctm    表示平均每次設備I/O操做的服務時間(以毫秒爲單位)。若是svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,若是await的值遠高於svctm的值,則表示I/O隊列等待太長, 系統上運行的應用程序將變慢。svctm一項正常時間在20ms左右(一次讀寫就是一次尋到+一次旋轉延遲+數據傳輸的時間。因爲,現代硬盤數據傳輸就是幾微秒或者幾十微秒的事情,遠遠小於尋道時間2~20ms和旋轉延遲4~8ms,因此只計算這兩個時間就差很少了,也就是15~20ms。只要大於20ms,就必須考慮是否交給磁盤讀寫的次數太多,致使磁盤性能下降了)

正常狀況下svctm應該是小於await值的,而svctm的大小和磁盤性能有關,CPU、內存的負荷也會對svctm值形成影響,過多的請求也會間接的致使svctm值的增長。

await值的大小通常取決與svctm的值和I/O隊列長度以及I/O請求模式,若是svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,若是await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢,此時能夠經過更換更快的硬盤來解決問題。


%util: 在統計時間內全部處理IO時間,除以總共統計時間,util = (r/s+w/s) * (svctm/1000),util=(0.12+0.14)*(2.43/1000)=0.0006318,因此該參數暗示了設備的繁忙程度,即一秒中有百分之多少的時間用於 I/O 操做,或者說一秒中有多少時間 I/O 隊列是非空的

。通常地,若是該參數是100%表示設備已經接近滿負荷運行了(固然若是是多磁盤,即便%util是100%,由於磁盤的併發能力,因此磁盤使用未必就到了瓶頸)。

若是 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。 idle小於70% IO壓力就較大了,通常讀取速度有較多的wait.


-p device | ALL

  與-x選項互斥,用於顯示塊設備及系統分區的統計信息.也能夠在-p後指定一個設備名,如:

  # iostat -p hda

  或顯示全部設備

  # iostat -p ALL


-c 獲取cpu部分狀態值

-t    在輸出數據時,打印蒐集數據的時間.

-V    打印版本號和幫助信息.


top 命令

    blob.png

Tasks:

total 進程總數

running 正在運行的進程數

sleeping 睡眠的進程數

stopped 中止的進程數

zombie 殭屍進程數


Cpu(s):

us 用戶空間佔用CPU百分比

sy 內核空間佔用CPU百分比

ni 用戶進程空間內改變過優先級的進程佔用CPU百分比

id 空閒CPU百分比

wa 等待輸入輸出的CPU時間百分比

wa 的百分比能夠大體的體現出當前的磁盤io請求是否頻繁。若是 wa的數量比較大,說明等待輸入輸出的的io比較多。


vmstat

        vmstat 命令報告關於線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告能夠用於平衡系統負載活動。系統範圍內的這些統計信息(全部的處理器中)都計算出以百分比表示的平均值,或者計算其總和。

blob.png

格式: vmstat [-V] [-n] [-S unit] [delay [count]]

參數解釋:

-V:顯示vmstat版本信息

-n:只在開始時顯示一次各字段名稱

-a:顯示活躍和非活躍內存

-d:顯示各個磁盤相關統計信息

-D:顯示磁盤整體信息

-p:顯示指定磁盤分區統計信息

-s:顯示內存相關統計信息及多種系統活動數量

-m:顯示slabinfo

-t:在輸出信息的時候也將時間一併輸出出來

-S:使用指定單位顯示。參數有k、K、m、M,分別表明1000、102四、1000000、1048576字節(byte)。默認單位爲K(1024bytes)

delay:刷新時間間隔。若是不指定,只顯示一條結果

count:刷新次數。若是不指定刷新次數,但指定了刷新時間間隔,這時刷新次數爲無窮


r  表示運行隊列(就是說多少個進程真的分配到CPU),當這個值超過了CPU數目,就會出現CPU瓶頸了。

b 表示阻塞的進程,在等待資源的進程數,好比正在等待I/O或者內存交換等。

swpd 虛擬內存已使用的大小(單位KB),

free   空閒的物理內存的大小(單位KB),

buff   Linux/Unix系統是用來存儲(單位KB)目錄裏面有什麼內容,權限等的緩存,

cache cache直接用來記憶咱們打開的文件,給文件作緩衝,把空閒的物理內存的一部分拿來作文件和目錄的緩存,是爲了提升程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

si  每秒從磁盤讀入虛擬內存的大小(單位:KB/秒),若是這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。個人機器內存充裕,一切正常。

so  每秒虛擬內存寫入磁盤的大小(單位:KB/秒),若是這個值大於0,同上。

bi 塊設備每秒接收的塊數量,單位kb/s,這裏的塊設備是指系統上全部的磁盤和其餘塊設備,默認塊大小是1024byte,

bo 塊設備每秒發送的塊數量,單位kb/s,例如咱們讀取文件,bo就要大於0。bi和bo通常都要接近0,否則就是IO過於頻繁,須要調整。

注意:若是bi+bo的值過大,且wa值較大,則表示系統磁盤IO瓶頸


in 每秒CPU的中斷次數,包括時間中斷


cs 每秒上下文切換次數,例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。


us 用戶CPU時間

sy 系統CPU時間,若是過高,表示系統調用時間長,例如是IO操做頻繁。

id  空閒 CPU時間,通常來講,id + us + sy = 100,通常我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。

wa:表示IO等待所佔用的CPU時間百分比,wa值越高,說明I/O等待越嚴重,根據經驗wa的參考值爲20%,若是超過20%,說明I/O等待嚴重,引發I/O等待的緣由多是磁盤大量隨機讀寫形成的,也多是磁盤或者監控器的貸款瓶頸(主要是塊操做)形成的


iotop

用來監視磁盤I/O使用情況的top類工具,IO統計工具如iostat,nmon等大多數是隻能統計到per設備的讀寫狀況,使用iotop命令能夠很方便的查看每一個進程是如何使用IO的。otop使用Python語言編寫而成,要求Python2.5(及以上版本)和Linux kernel2.6.20(及以上版本);

通常排查系統IO性能時,先使用iostat查看系統IO是否有延遲,若是有延遲能夠經過iotop來查看是哪一個進程佔用了IO

yum install iotop

iotop(選項)

--version #顯示版本號

-h, --help #顯示幫助信息

-o, --only #顯示進程或者線程實際上正在作的I/O,而不是所有的,能夠隨時切換按o

-b, --batch #運行在非交互式的模式

-n NUM, --iter=NUM #在非交互式模式下,設置顯示的次數,

-d SEC, --delay=SEC #設置顯示的間隔秒數,支持非整數值

-p PID, --pid=PID #只顯示指定PID的信息

-u USER, --user=USER #顯示指定的用戶的進程的信息

-P, --processes #只顯示進程,通常爲顯示全部的線程

-a, --accumulated #顯示從iotop啓動後每一個線程完成了的IO總數

-k, --kilobytes #以千字節顯示

-t, --time #在每一行前添加一個當前的時間

-q, --quie


快捷鍵:

左右箭頭:改變排序方式,默認是按IO排序。

r:改變排序順序。

o:只顯示有IO輸出的進程。

p:進程/線程的顯示方式的切換。

a:顯示累積使用量。

q:退出。



服務器的IO負載很高(iostat中的util)

相關文章
相關標籤/搜索