這兩天發現一台測試用的伺服器經常負載很高,但cpu和記憶體消耗卻很少,很是奇怪,經過診斷發現是由于大容量的測試資料導緻高并發下的磁盤IO消耗比較大,由于緩存是小檔案并且數量比較大,是以并發比較高的情況下Io消耗非常大。 那怎樣才能快速的定位到并發高是由于磁盤io開銷大呢?
一、用 top 指令中的 資訊進行觀察
2011-8-17 20:55:37 上傳
下載下傳附件 (51.98 KB)
劃紅線的參數解釋如下:
- Tasks: 437 total 程序總數
- 4 running 正在運作的程序數
- 430 sleeping 睡眠的程序數
- 3 stopped 停止的程序數
- 0 zombie 僵屍程序數
- Cpu(s):
- 7.1% us 使用者空間占用CPU百分比
- 4.2% sy 核心空間占用CPU百分比
- 0.0% ni 使用者程序空間内改變過優先級的程序占用CPU百分比
- 76.8% id 空閑CPU百分比
- 12% wa 等待輸入輸出的CPU時間百分比
- 12% wa 的百分比可以大緻的展現出目前等待輸入輸出的磁盤io請求過于頻繁。
複制代碼
為進一步分析,我們跟蹤關鍵程序定位程式
#strace -p 28644 (如圖示占用CPU較高)
下載下傳附件 (45.23 KB)
說明在多線程條件下,如果并發操作過于頻繁,semtimedop會調用失敗,Input/output 出錯。
進一步定位到程式 #ps -ef | grep 28644
下載下傳附件 (8.88 KB)
可以知道是ora_lgwr_nms程式導緻的讀寫開銷比較大。
二、利用IOSTAT指令觀察
磁盤的IO性能是衡量計算機總體性能的一個重要名額。Linux提供了iostat指令來獲卻磁盤輸入/輸出(即IO)統計資訊。
#iostat -x 1 統計完整的結果,每秒一次。
下載下傳附件 (47.84 KB)
iowait的值比較大,說明讀寫頻繁。
#iostat -p 1統計各個分區的讀寫情況,每秒1次。
下載下傳附件 (43.1 KB)
使用 #mount 指令,來對應查找就知道sda5對應的/opt分區和sdb8對應的/data分區讀寫頻繁。
下載下傳附件 (36.17 KB)
再定位到DATA分區,檢視資料庫歸檔情況,發現一分鐘内歸檔産生四個文檔并且每個檔案有48M這麼大,寫入應該非常頻繁,導緻磁盤IO開銷比較大。
下載下傳附件 (80.37 KB)
而OPT分區由于有FTP傳輸到導緻磁盤開銷比較大。
分析定位完畢,針對相關問題調整FTP和資料庫歸檔,然後再看一下都正常了。
下載下傳附件 (50.63 KB)
- IOPS = 1000 / (3 + 60000/7200/2) = 140
- IOPS = 1000 / (3 + 60000/10000/2) = 167
- IOPS = 1000 / (3 + 60000/15000/2) = 200