當看到I/O等待時間所占CPU時間的比重非常高的時候,首先要檢查的就是機器是否正在大量使用交換空間,由於硬盤操作的速度遠遠低於RAM。所以當系統內存耗盡,開始使用交換空間的時候。系統的性能會受到嚴重影響。
不論什么想要訪問硬盤的操作都要完畢與硬盤的I/O交換。所以,故障排除的第一步是看內存是否耗盡,假設是。先解決問題。假設還有大量可用的RAM,你須要明白那個進程占用了大部分I/O操作。
在你非常難弄明確究竟是哪個進程占用了大量I/O資源。使用iostat能夠找到是哪個分區運行大量I/O操作。
iostat的使用

最上面顯示的是1個cpu,64位系統,linux內核版本號
avg-cpu段:
%user: 在用戶級別執行所使用的CPU的百分比
%nice: nice操作所使用的CPU的百分比
%system: 在系統級別(kernel)執行所使用CPU的百分比
%iowait: CPU等待硬件I/O時,所占用CPU百分比
%idle: CPU空暇時間的百分比
Device段:
sda:設備名
tps: 每秒鍾發送到的I/O請求數.
Blk_read /s: 每秒讀取的數據量
Blk_wrtn/s: 每秒寫入的數據量.
Blk_read: 讀入的總的數據量
Blk_wrtn: 寫入的總的數據量
iostat各個參數說明:
-c 僅顯示CPU統計信息.與-d選項相互排斥.
-d 僅顯示磁盤統計信息.與-c選項相互排斥.
-k 以K為單位顯示每秒的磁盤請求數,默認單位塊.
-p device | ALL
與-x選項相互排斥,用於顯示塊設備及系統分區的統計信息.也能夠在-p后指定一個設備名,如:
# iostat -p hda
或顯示全部設備
# iostat -p ALL
-t 在輸出數據時,打印搜集數據的時間.
-V 打印版本和幫助信息.
-x 輸出擴展信息.
iostat后加一個數字
iostat 4 表示每隔4秒就刷新一次
iotop的使用


--version 顯示版本然后退出
-h, --help 顯示幫助然后退出
-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匯總。
