天天看點

深入了解使用linux檢視磁盤io使用情況

作者:核心中文社群

五種方法 top指令、vmstat指令、iostat指令、iotop指令、pt-ioprofile指令(附安裝包和使用方法)

一、 top指令

top - 11:41:22 up 51 min, 2 users, load average: 0.01, 0.04, 0.01

Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.2%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 4151760k total, 2284628k used, 1867132k free, 47892k buffers

Swap: 4192956k total, 0k used, 4192956k free, 2145020k cached

分析:檢視0.4%wa這裡,IO等待所占用的CPU時間的百分比,高過30%時IO壓力高

具體的解釋如下:

  Tasks: 130 total 程序總數

  1 running 正在運作的程序數

  129 sleeping 睡眠的程序數

  0 stopped 停止的程序數

  0 zombie 僵屍程序數

  Cpu(s):

  0.2% us 使用者空間占用CPU百分比

  0.1% sy 核心空間占用CPU百分比

  0.0% ni 使用者程序空間内改變過優先級的程序占用CPU百分比

  99.2% id 空閑CPU百分比

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

  0.0% hi

  0.0% si

  0.4% wa 的百分比可以大緻的展現出目前的磁盤io請求是否頻繁。如果 wa的數量比較大,說明等待輸入輸出的的io比較多

深入了解使用linux檢視磁盤io使用情況

需要的小夥伴私信回複核心免費領取

二、vmstat指令

指令:vmstat 2 5(每兩秒執行一次,執行5次)

vmstat參數解釋:

Procs

r: 等待運作的程序數

b: 處在非中斷睡眠狀态的程序數

Memory

swpd: 虛拟記憶體使用情況,機關:KB

free: 空閑的記憶體,機關KB

buff: 被用來做為緩存的記憶體數,機關:KB

Swap

si: 從磁盤交換到記憶體的交換頁數量,機關:KB/秒

so: 從記憶體交換到磁盤的交換頁數量,機關:KB/秒

IO

bi: 發送到塊裝置的塊數,機關:塊/秒

bo: 從塊裝置接收到的塊數,機關:塊/秒

System

in: 每秒的中斷數,包括時鐘中斷

cs: 每秒的環境(上下文)切換次數

CPU(按 CPU 的總使用百分比來顯示)

us: CPU 使用時間

sy: CPU 系統使用時間

id: 閑置時間

三、iostat 使用

安裝指令: yum install sysstat

使用iostat -d -k 2 檢視IO情況:

-k:已kb為機關顯示讀寫資訊

-m:已mb為機關顯示讀寫資訊

深入了解使用linux檢視磁盤io使用情況

使用iostat -x 5 檢視IO情況:

-x:更詳細的io裝置統計資訊

深入了解使用linux檢視磁盤io使用情況

選項 說明

rrqm/s	每秒對該裝置的讀請求被合并次數,檔案系統會對讀取同塊(block)的請求進行合并
wrqm/s	每秒對該裝置的寫請求被合并次數
r/s	        每秒完成的讀次數
w/s	        每秒完成的寫次數
rkB/s	每秒讀資料量(kB為機關)
wkB/s	每秒寫資料量(kB為機關)
avgrq-sz	平均每次IO操作的資料量(扇區數為機關)
avgqu-sz	平均等待處理的IO請求隊列長度
await	平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為機關)
svctm	平均每次IO請求的處理時間(毫秒為機關)
%util	采用周期内用于IO操作的時間比率,即IO隊列非空的時間比率
ps:%util: 一秒中有百分之多少的時間用于 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因為use的機關為毫秒)           

如果 %util 接近 100%,說明産生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。

四、iotop指令

安裝指令:yum install iotop

檢視哪個線程耗IO比較高、按 o 隻顯示有磁盤 IO 活動的程序。

深入了解使用linux檢視磁盤io使用情況

各個參數說明:

  -o, --only隻顯示正在産生I/O的程序或線程。除了傳參,可以在運作過程中按o生效。
  -b, --batch非互動模式,一般用來記錄日志。
  -n NUM, --iter=NUM設定監測的次數,預設無限。在非互動模式下很有用。
  -d SEC, --delay=SEC設定每次監測的間隔,預設1秒,接受非整形資料例如1.1。
  -p PID, --pid=PID指定監測的程序/線程。
  -u USER, --user=USER指定監測某個使用者産生的I/O。
  -P, --processes僅顯示程序,預設iotop顯示所有線程。
  -a, --accumulated顯示累積的I/O,而不是帶寬。
  -k, --kilobytes使用kB機關,而不是對人友好的機關。在非互動模式下,腳本程式設計有用。
  -t, --time 加上時間戳,非互動非模式。
  -q, --quiet 禁止頭幾行,非互動模式。有三種指定方式。
  -q 隻在第一次監測時顯示列名
  -qq 永遠不顯示列名。
  -qqq 永遠不顯示I/O彙總。
互動按鍵:
  和top指令類似,iotop也支援以下幾個互動按鍵。
  left和right方向鍵:改變排序。  
  r:反向排序。
  o:切換至選項--only。
  p:切換至--processes選項。
  a:切換至--accumulated選項。
  q:退出。
  i:改變線程的優先級。
           

五、pt-ioprofile指令

安裝步驟:

1、安裝依賴包:yum install -y perl perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-Digest-MD5 perl-ExtUtils-MakeMaker

2、下載下傳:wget https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm

3、安裝rpm包:rpm -ivh percona-toolkit-3.0.13-1.el7.x86_64.rpm

使用方法:

pt-ioprofile --profile-pid=1236 --cell=sizes

pt-ioprofile的原理是對某個pid附加一個strace程序進行IO分析。

深入了解使用linux檢視磁盤io使用情況

對于定位問題更有用的是通過IO的吞吐量來進行定位。使用參數 --cell=sizes,該參數将結果已 B/s 的方式展示出來

從上圖可以看出IO負載的主要來源是jetty。

并且壓力主要集中在讀取上。

繼續閱讀