五種方法 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比較多
需要的小夥伴私信回複核心免費領取
二、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為機關顯示讀寫資訊
使用iostat -x 5 檢視IO情況:
-x:更詳細的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 活動的程序。
各個參數說明:
-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分析。
對于定位問題更有用的是通過IO的吞吐量來進行定位。使用參數 --cell=sizes,該參數将結果已 B/s 的方式展示出來
從上圖可以看出IO負載的主要來源是jetty。
并且壓力主要集中在讀取上。