linux查看磁盘io使用情况
六種方法
? top命令、vmstat命令、iostat命令、iotop命令、pt-ioprofile命令、pidstat命令
一、 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為單位顯示讀寫信息
device:磁盤名稱
tps:每秒鐘發送到的I/O請求數.
Blk_read/s:每秒讀取的block數.
Blk_wrtn/s:每秒寫入的block數.
Blk_read:讀入的block總數.
Blk_wrtn:寫入的block總數.
使用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隊列非空的時間比率 |
%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。
并且壓力主要集中在讀取上。
六、sar命令
sar -d
- DEV ?磁盤設備的名稱,如果不加-p,會顯示dev253-0類似的設備名稱,因此加上-p顯示的名稱更直接
- tps ?每秒I/O的傳輸總數
- rd_sec/s ?每秒讀取的扇區的總數
- wr_sec/s ?每秒寫入的扇區的總數
- avgrq-sz ?平均每次次磁盤I/O操作的數據大小(扇區)
- avgqu-sz ?磁盤請求隊列的平均長度
- await ?從請求磁盤操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒等于1000毫秒),等于尋道時間+隊列時間+服務時間
- svctm ?I/O的服務處理時間,即不包括請求隊列中的時間
- %util ?I/O請求占用的CPU百分比,值越高,說明I/O越慢
除了查看磁盤外還能查看其他的資源信息:
- 查看CPU使用情況 ?sar -u
- 將統計結果保存到文件 sar -o ?& ?sar -f
- 查看平均負載 ?sar -q
- 查看內存使用情況 ?sar -r
- 查看系統swap分區統計情況 ?sar -W
- 查看IO和傳遞速率 ?sar -b
- ?統計網絡信息 sar -n?
- ?網絡接口信息 sar -n DEV
- ?網絡設備通信失敗信息 sar -n EDVE
- 統計socket連接信息 ?sar -n SOCK
- ?TCP連接的統計 ?sar -n TCP
七、dstat命令
參考:CentOS下性能監測工具 dstat - 走看看
八、sysstat命令
九、pidstat命令
pidstat -d 1 (每1秒打印一次使用磁盤io的進程及io速度)
?ctrl+c后顯示統計
總結
以上是生活随笔為你收集整理的linux查看磁盘io使用情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 端午节蓝屏之谜:金山系列软件同微软KB2
- 下一篇: Linux下端口映射工具