SE LINUX下磁盤IO性能監測分析

  這兩天發現一臺測試用的服務器經常負載很高,但cpu和內存消耗卻很少,很是奇怪,經過診斷髮現是由於大容量的測試數據導致高併發下的磁盤IO消耗比較大,由於緩存是小文件並且數量比較大,所以併發比較高的情況下Io消耗非常大。 那怎樣才能快速的定位到併發高是由於磁盤io開銷大呢?

一、用 top 命令中的 信息進行觀察

204027418.jpg

 

 

 


劃紅線的參數解釋如下:
 

  1. Tasks: 437 total 進程總數
     
  2. 4 running 正在運行的進程數
     
  3. 430 sleeping 睡眠的進程數
     
  4. 3 stopped 停止的進程數
     
  5. 0 zombie 殭屍進程數
     
  6. Cpu(s):
     
  7. 7.1% us 用戶空間佔用CPU百分比
     
  8. 4.2% sy 內核空間佔用CPU百分比
     
  9. 0.0% ni 用戶進程空間內改變過優先級的進程佔用CPU百分比
     
  10. 76.8% id 空閒CPU百分比
     
  11. 12% wa 等待輸入輸出的CPU時間百分比
     
  12. 12% wa 的百分比可以大致的體現出當前等待輸入輸出的磁盤io請求過於頻繁。
複製代碼


爲進一步分析,我們跟蹤關鍵進程定位程序
#strace  -p  28644  (如圖示佔用CPU較高)

 

205645745.jpg


 

 


說明在多線程條件下,如果併發操作過於頻繁,semtimedop會調用失敗,Input/output  出錯。
進一步定位到程序 #ps  -ef | grep  28644

 

210320529.jpg


 

 


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


二、利用IOSTAT命令觀察
磁盤的IO性能是衡量計算機總體性能的一個重要指標。Linux提供了iostat命令來獲卻磁盤輸入/輸出(即IO)統計信息。
#iostat  -x   1  統計完整的結果,每秒一次。

 

211124839.jpg
 

 

 


iowait的值比較大,說明讀寫頻繁。
#iostat  -p   1統計各個分區的讀寫情況,每秒1次。
 

083525343.jpg


 

 


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

083648227.jpg


 

 


再定位到DATA分區,查看數據庫歸檔情況,發現一分鐘內歸檔產生四個文檔並且每個文件有48M這麼大,寫入應該非常頻繁,導致磁盤IO開銷比較大。
 

083838990.jpg


 

 


  而OPT分區由於有FTP傳輸到導致磁盤開銷比較大。
分析定位完畢,針對相關問題調整FTP和數據庫歸檔,然後再看一下都正常了。

 

084733678.jpg



 

 


 

   084802567.jpg


 

 


總結:TOP、IOSTAT都是比較常見的命令,通過基本命令的靈活應用來分析和定位問題是比較方便的,特別是基本命令的參數選擇和使用更是值得我們大家研究的。

補充:磁盤IOPS知識

IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁盤性能的主要指標之一。IOPS是指單位時間內系統能處理的I/O請求數量,一般以每秒處理的I/O請求數量爲單位,I/O請求通常爲讀或寫數據操作請求。隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),IOPS是關鍵衡量指標。另一個重要指標是數據吞吐量(Throughput),指單位時間內可以成功傳輸的數據數量。對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。
傳統磁盤本質上一種機械裝置,如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理論最大值分別爲,
 

  1. IOPS = 1000 / (3 + 60000/7200/2) = 140
     
  2. IOPS = 1000 / (3 + 60000/10000/2) = 167
     
  3. IOPS = 1000 / (3 + 60000/15000/2) = 200
複製代碼


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章