Linux
如何檢查每個程序的磁碟 I/O 使用率?
我在使用 Linux 系統時遇到問題,我發現
sysstat
並sar
報告了磁碟 I/O、平均服務時間和平均等待時間的巨大峰值。我如何確定下次發生這些峰值的過程是哪個過程?
有可能
sar
嗎?我可以從已記錄的sar
文件中找到此資訊嗎?的輸出
sar -d
,系統停頓發生在下午 12.58-13.01 左右。12:40:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 12:40:01 dev8-0 11.57 0.11 710.08 61.36 0.01 0.97 0.37 0.43 12:45:01 dev8-0 13.36 0.00 972.93 72.82 0.01 1.00 0.32 0.43 12:50:01 dev8-0 13.55 0.03 616.56 45.49 0.01 0.70 0.35 0.47 12:55:01 dev8-0 13.99 0.08 917.00 65.55 0.01 0.86 0.37 0.52 13:01:02 dev8-0 6.28 0.00 400.53 63.81 0.89 141.87 141.12 88.59 13:05:01 dev8-0 22.75 0.03 932.13 40.97 0.01 0.65 0.27 0.62 13:10:01 dev8-0 13.11 0.00 634.55 48.42 0.01 0.71 0.38 0.50
我對昨天開始的另一個執行緒也有這個後續問題:
如果您有幸趕上了下一個使用高峰期,您可以使用iotop以互動方式研究每個程序的 I/O 統計資訊。
您可以使用pidstat通過以下命令每 20 秒列印一次每個程序的累積 io 統計資訊:
# pidstat -dl 20
每行將有以下列:
- PID - 程序 ID
- kB_rd/s - 任務導致每秒從磁碟讀取的千字節數。
- kB_wr/s - 任務已導致或將導致每秒寫入磁碟的千字節數。
- kB_ccwr/s - 已被任務取消寫入磁碟的千字節數。當任務截斷一些臟頁記憶體時,可能會發生這種情況。在這種情況下,不會發生另一個任務已被佔用的一些 IO。
- 命令 - 任務的命令名稱。
輸出如下所示:
05:57:12 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command 05:57:32 PM 202 0.00 2.40 0.00 jbd2/sda1-8 05:57:32 PM 3000 0.00 0.20 0.00 kdeinit4: plasma-desktop [kdeinit] 05:57:32 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command 05:57:52 PM 202 0.00 0.80 0.00 jbd2/sda1-8 05:57:52 PM 411 0.00 1.20 0.00 jbd2/sda3-8 05:57:52 PM 2791 0.00 37.80 1.00 kdeinit4: kdeinit4 Running... 05:57:52 PM 5156 0.00 0.80 0.00 /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 05:57:52 PM 8651 98.20 0.00 0.00 bash 05:57:52 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command 05:58:12 PM 202 0.00 0.20 0.00 jbd2/sda1-8 05:58:12 PM 3000 0.00 0.80 0.00 kdeinit4: plasma-desktop [kdeinit]