LINUX下磁碟IO效能監測分析

2021-06-09 19:47:46 字數 2964 閱讀 5443

linux下磁碟io效能監測分析

2011-08-16 18:10:23

標籤: 效能監測分析

linux

磁碟io

休閒suse linux

這兩天發現一台測試用的伺服器經常負載很高,但cpu和記憶體消耗卻很少,很是奇怪,經過診斷發現是由於大容量的測試資料導致高併發下的磁碟io消耗比較大,由於快取是小檔案並且數量比較大,所以併發比較高的情況下io消耗非常大。 那怎樣才能快速的定位到併發高是由於磁碟io開銷大呢?

一、用 top 命令中的 資訊進行觀察

劃紅線的引數解釋如下:

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較高)

說明在多執行緒條件下,如果併發操作過於頻繁,semtimedop會呼叫失敗,input/output  出錯。

進一步定位到程式 #ps  -ef | grep  28644

可以知道是ora_lgwr_nms程式導致的讀寫開銷比較大。

二、利用iostat命令觀察

磁碟的io效能是衡量計算機總體效能的乙個重要指標。linux提供了iostat命令來獲卻磁碟輸入/輸出(即io)統計資訊。

#iostat  -x   1  統計完整的結果,每秒一次。

iowait的值比較大,說明讀寫頻繁。

#iostat  -p   1統計各個分割槽的讀寫情況,每秒1次。

使用 #mount  命令,來對應查詢就知道sda5對應的/opt分割槽和sdb8對應的/data分割槽讀寫頻繁。

再定位到data分割槽,檢視資料庫歸檔情況,發現一分鐘內歸檔產生四個文件並且每個檔案有48m這麼大,寫入應該非常頻繁,導致磁碟io開銷比較大。

而opt分割槽由於有ftp傳輸到導致磁碟開銷比較大。

分析定位完畢,針對相關問題調整ftp和資料庫歸檔,然後再看一下都正常了。

補充:磁碟iops知識

傳統磁碟本質上一種機械裝置,如fc, sas, sata磁碟,轉速通常為5400/7200/10k/15k rpm不等。影響磁碟的關鍵因素是磁碟服務時間,即磁碟完成乙個i/o請求所花費的時間,它由尋道時間、旋轉延遲和資料傳輸時間三部分構成。

尋道時間tseek是指將讀寫磁頭移動至正確的磁軌上所需要的時間。尋道時間越短,i/o操作越快,目前磁碟的平均尋道時間一般在3-15ms。

旋轉延遲trotation是指碟片旋轉將請求資料所在扇區移至讀寫磁頭下方所需要的時間。旋轉延遲取決於磁碟轉速,通常使用磁碟旋轉一周所需時間的1/2表示。比如,7200 rpm的磁碟平均旋轉延遲大約為60*1000/7200/2 = 4.17ms,而轉速為15000 rpm的磁碟其平均旋轉延遲約為2ms。

資料傳輸時間ttransfer是指完成傳輸所請求的資料所需要的時間,它取決於資料傳輸率,其值等於資料大小除以資料傳輸率。目前ide/ata能達到133mb/s,sata ii可達到300mb/s的介面資料傳輸率,資料傳輸時間通常遠小於前兩部分時間。

因此,理論上可以計算出磁碟的最大iops,即iops = 1000 ms/ (tseek + troatation),忽略資料傳輸時間。假設磁碟平均物理尋道時間為3ms, 磁碟轉速為7200,10k,15k rpm,則磁碟iops理論最大值分別為,

iops = 1000 / (3 + 60000/7200/2) = 140

iops = 1000 / (3 + 60000/10000/2) = 167

iops = 1000 / (3 + 60000/15000/2) = 200

決定iops的主要取決與陣列的演算法,cache命中率,以及磁碟個數。陣列的演算法因為不同的陣列不同而不同.在raid5與raid10上,讀iops沒有差別,但是相同的業務,寫iops最終落在每塊磁碟上是有差別的,如果達到了每塊磁碟的寫的i0ps限制,效能會受到影響。對於raid5來說每乙個寫實際發生了4個io,而raid10只發生了2次io,所以raid10比raid5在寫上要快一些。

SUSE LINUX下磁碟IO效能監測分析

這兩天發現一台測試用的伺服器經常負載很高,但cpu和記憶體消耗卻很少,很是奇怪,經過診斷發現是由於大容量的測試資料導致高併發下的磁碟io消耗比較大,由於快取是小檔案並且數量比較大,所以併發比較高的情況下io消耗非常大。那怎樣才能快速的定位到併發高是由於磁碟io開銷大呢?一 用 top 命令中的 資訊...

磁碟 I O 效能

如果將 sql server 配置成僅包含幾個千兆位元組 gb 的資料,且不承擔繁重的讀或寫活動,便沒有太大的必要關注磁碟 i o 主題,以及在硬碟之間平衡 sql server i o 活動以獲取最佳效能。但是要建立包含成百上千 gb 位元組的資料且 或承擔繁重的讀和 或寫活動的大型 sql se...

linux下dd命令使用 磁碟效能測試 IO測試

dev null 在類unix系統中,dev null,或稱空裝置,是乙個特殊的裝置檔案,它丟棄一切寫入其中的資料 但報告寫入操作成功 可以理解為linux中的黑洞檔案,一般用於測試寫入。dev zero 在類unix 作業系統中,dev zero 是乙個特殊的檔案,當你讀它的時候,它會提供無限的空...