高IO等待問題的第一個征兆通常是系統平均負載。負載均衡的計算都是基于CPU利用率的,即使用或等待CPU的進程數目,當然,在Linux平臺上,進程 幾乎都處于不可中斷的睡眠狀態。負載均衡的基線可以解釋為,在一個CPU核的機器上上,該CPU得到充分利用。因此,對于4核機器中,如果系統平均復雜為 4,表示該機器有足夠的資源來處理它需要做的工作,當然只是勉強。在相同的4核系統,如果平均復雜是8,那么以為這將意味著服務器系統需要8個core才 能處理所要做的工作,但現在只有4個核,所以已經超載。
如果系統顯示平均負載較高,但是CPU的系統(system)和用戶(user)利用率較低,那么就需要觀察IO 等待(即IO wait)。在linuc系統上,IO wait對系統負載有較大的影響,主要因為一個或多個核都可能被磁盤IO或網絡
發現進程在等待IO完成是一回事,驗證高IO wait的原因是另一回事。使用”iostat –x 1”能夠顯示正在使用的物理存儲設備的IO情況:
[username@server~]$ iostat -x 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
cciss/c0d0 0.08 5.94 1.28 2.75 17.34 69.52 21.60 0.11 26.82 4.12 1.66
cciss/c0d0p1 0.00 0.00 0.00 0.00 0.00 0.00 5.30 0.00 8.76 5.98 0.00
cciss/c0d0p2 0.00 0.00 0.00 0.00 0.00 0.00 58.45 0.00 7.79 3.21 0.00
cciss/c0d0p3 0.08 5.94 1.28 2.75 17.34 69.52 21.60 0.11 26.82 4.12 1.66
由上可知,很明顯,設備/dev/cciss/c0d0p3的等待時間很長。然而,我們并沒有掛載找個設備,實際上,它是個LVM設備。如果您使用的是 LVM作為存儲,那么,您應該發現iostat應該有那么一點混亂。LVM使用device mapper子系統將文件系統映射到物理設備,因此,iostat可能顯示多個設備,比如/ dev/dm-0和/ dev/dm-1。而”df –h”的輸出卻不會顯示device mapper路徑,而是打印了LVM路徑。最簡單的方法是在iostat參數中添加選項”-N”。
[username@server~]$ iostat -xN 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
vg1-root 0.00 0.00 0.09 3.01 0.85 24.08 8.05 0.08 24.69 1.79 0.55
vg1-home 0.00 0.00 0.05 1.46 0.97 11.69 8.36 0.03 19.89 3.76 0.57
vg1-opt 0.00 0.00 0.03 1.56 0.46 12.48 8.12 0.05 29.89 3.53 0.56
vg1-tmp 0.00 0.00 0.00 0.06 0.00 0.45 8.00 0.00 24.85 4.90 0.03
vg1-usr 0.00 0.00 0.63 1.41 5.85 11.28 8.38 0.07 32.48 3.11 0.63
vg1-var 0.00 0.00 0.55 1.19 9.21 9.54 10.74 0.04 24.10 4.24 0.74
vg1-swaplv 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.98 1.88 0.00
為簡便起見,裁剪上面iostat命令的輸出信息。列出的每個文件系統所顯示出的IO等待都是不可接受的,觀察第十欄標有“await”的數據。相比而 言,文件系統/usr的await時間要高一些。我們先來分析一下這個文件系統,使用命令” fuser -vm /opt ”查看哪些進程在訪問這個文件系統,進程列表如下。
root@server:/root > fuser -vm /opt
USER PID ACCESS COMMAND
/opt: db2fenc1 1067 ....m db2fmp
db2fenc1 1071 ....m db2fmp
db2fenc1 2560 ....m db2fmp
db2fenc1 5221 ....m db2fmp
當前服務器上有112個DB2進程正在訪問/opt文件系統,為簡便起見,列出四項。看來已經找到導致問題的原因,在服務器上,數據庫配置為可使用速度更快的SAN訪問,操作系統可以使用的是本地磁盤。可以打電話問問DBA(數據庫管理員)怎么做才能這樣配置。
最后一個組要的注意的是LVM和device mapper。 “Iostat –xN”命令的輸出顯示的是邏輯卷名,但它是可以通過命令”ls –lrt / dev /mapper”查到映射關系表。輸出信息的第六列中的dm-是與iostat中的設備名相對應的。
有時候,在操作系統或應用層是沒有什么可以做的,除了選擇速度更快的磁盤,并沒有其他的選擇。幸運的是,快速磁盤訪問,如SAN或SSD的價格正在逐步下降。