天天看點

Linux - iostat 指令詳解

  1. iostat  
  2. 性能評估的一個主要部分就是磁盤性能。iostat 指令提供了存儲接口的性能名額。  
  3. # iostat  
  4. Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008  
  5. avg-cpu:  %user   %nice    %sys %iowait   %idle  
  6.           15.71    0.00    1.07    3.30   79.91  
  7. Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
  8. cciss/c0d0        4.85        34.82       130.69  307949274 1155708619  
  9. cciss/c0d0p1      0.08         0.21         0.00    1897036       3659  
  10. cciss/c0d0p2     18.11        34.61       130.69  306051650 1155700792  
  11. cciss/c0d1        0.96        13.32        19.75  117780303  174676304  
  12. cciss/c0d1p1      2.67        13.32        19.75  117780007  174676288  
  13. sda               0.00         0.00         0.00        184          0  
  14. sdb               1.03         5.94        18.84   52490104  166623534  
  15. sdc               0.00         0.00         0.00        184          0  
  16. sdd               1.74        38.19        11.49  337697496  101649200  
  17. sde               0.00         0.00         0.00        184          0  
  18. sdf               1.51        34.90         6.80  308638992   60159368  
  19. sdg               0.00         0.00         0.00        184          0  
  20. ... and so on ...  
  21. 輸出的開始部分顯示了可用 CPU 和 I/O 等待時間等名額,與您在 mpstat 指令中看到的相同。  
  22. 輸出的下一部分顯示對系統上每個磁盤裝置非常重要的名額。讓我們看一看這些列的含義:  
  23. tps          每秒的傳輸數量,例如,每秒的 I/O 操作數。注:這隻是 I/O 操作的數量;每個操作可能非常大,也可能非常小。  
  24. Blk_read/s   每秒從該裝置讀取的塊數。通常,塊的大小為 512 位元組。這是一個磁盤使用率較好的值。  
  25. Blk_wrtn/s   每秒寫入該裝置的塊數  
  26. Blk_read     到目前為止從該裝置讀取的塊數。注意,這并不是正在發生的情況。很多塊已經從該裝置讀取。  
  27.              可能現在什麼也沒有讀取。觀察一段時間,看是否有變化。  
  28. Blk_wrtn     寫入該裝置的塊數。  
  29. 在一個擁有很多裝置的系統中,輸出可能需要通過螢幕多次滾動 — 這使得某些内容較難檢查,  
  30. 尤其當您查找特定裝置時更是如此。可以通過将該裝置作為參數傳遞隻獲得特定裝置的名額。  
  31. # iostat sdaj     
  32. Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008  
  33. avg-cpu:  %user   %nice    %sys %iowait   %idle  
  34.           15.71    0.00    1.07    3.30   79.91  
  35. Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
  36. sdaj              1.58        31.93        10.65  282355456   94172401  
  37. 開始部分顯示的 CPU 名額可能沒什麼用處。要取消在輸出開始部分顯示的與 CPU 有關的統計資訊,使用 -d 選項。  
  38. 可以将可選參數放在結尾處,讓 iostat 以固定的時間間隔顯示裝置統計資訊。要每隔 5 秒擷取一次該裝置的統計資訊,共 10 次,執行以下指令:  
  39. # iostat -d sdaj 5 10  
  40. You can display the stats in kilobytes instead of just bytes using the -k option:  
  41. # iostat -k -d sdaj      
  42. Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008  
  43. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn  
  44. sdaj              1.58        15.96         5.32  141176880   47085232  
  45. 盡管以上輸出可能非常有幫助,但很多資訊并不容易顯示。例如,磁盤問題的一個主要原因是磁盤服務時間,  
  46. 即,磁盤将資料送達請求該資料的程序的時間。要獲得該級别的名額,我們需要使用 -x 選項獲得磁盤的“擴充”統計資訊。  
  47. # iostat -x sdaj  
  48. Linux 2.6.9-55.0.9.ELlargesmp (prolin3)     12/27/2008  
  49. avg-cpu:  %user   %nice    %sys %iowait   %idle  
  50.           15.71    0.00    1.07    3.30   79.91  
  51. Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util  
  52. sdaj         0.00   0.00  1.07  0.51   31.93   10.65    15.96     5.32    27.01     0.01    6.26   6.00   0.95  
  53. 讓我們看一看這些列的含義:  
  54. rrqm/s    每秒合并的讀請求數。磁盤請求排成隊列。隻要可能,核心就會嘗試将多個請求合并成一個請求。  
  55.           該名額測量讀取傳輸的合并請求數。  
  56. wrqm/s    與讀取類似,這是合并的寫請求數。  
  57. r/s       每秒向該裝置發出的讀請求數  
  58. w/s       同樣,它是每秒向該裝置發出的寫請求數  
  59. rsec/s    每秒從該裝置讀取的扇區數  
  60. wsec/s    每秒寫入該裝置的扇區數  
  61. rkB/s     每秒從該裝置讀取的資料,以 KB/秒為機關  
  62. wkB/s     寫入該裝置的資料,以 kb/s 為機關  
  63. avgrq-sz  讀請求的平均大小(扇區數)  
  64. avgqu-sz  該裝置的請求隊列的平均長度  
  65. await     裝置發出 I/O 請求經過的平均時間,以毫秒為機關。這是服務時間與隊列中的等待時間的總和。  
  66. svctm     裝置的平均服務時間,以毫秒為機關  
  67. %util     裝置的帶寬使用率。如果該值接近于 100%,則表明該裝置已飽和。  
  68. 用法  
  69. 可以使用這些指令的組合從輸出中擷取一些有意義的資訊。記住,在從程序擷取請求時磁盤速度可能很慢。磁盤中的資料到達隊列所花費的時間稱為服務時間。如果您想找出服務時間最長的磁盤,執行以下指令:  
  70. # iostat -x | sort -nrk13  
  71. sdat         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    18.80     0.00   64.06  64.05   0.00  
  72. sdv          0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    17.16     0.00   18.03  17.64   0.00  
  73. sdak         0.00   0.00  0.00  0.14    0.00    1.11     0.00     0.55     8.02     0.00   17.00  17.00   0.24  
  74. sdm          0.00   0.00  0.00  0.19    0.01    1.52     0.01     0.76     8.06     0.00   16.78  16.78   0.32  
  75. ... and so on ...  
  76. 這表明磁盤 sdat 的服務時間最長(64.05 毫秒)。為什麼時間這麼長呢?可能性很多,但最可能的原因有三個:  
  77. 該磁盤擷取了大量請求,以至于平均服務時間長。  
  78. 該磁盤利用已移到可能的最大帶寬。  
  79. 該磁盤原本速度就很慢。  
  80. 檢視輸出,我們看到讀取數/秒和寫入數/秒為 0.00(幾乎沒有發生任何事件),是以我們可以排除第一種可能性。  
  81. 使用率也為 0.00%(最後一列),是以我們可以排除第二種可能性。這就剩下了第三種可能性。  
  82. 但得出該磁盤原本速度慢的結論之前,我們需要更加仔細地觀察該磁盤。  
  83. 我們可以隻檢查該磁盤,每隔 5 秒 檢查一次,共 10 次。  
  84. # iostat -x sdat 5 10  
  85. 如果輸出顯示相同的平均服務時間、讀取速率和使用率,則可以斷定最有可能是第三種情況。  
  86. 如果這些數值發生了變化,我們可以擷取更詳細的線索來了解該裝置服務時間較長的原因。  
  87. 同樣,可以對讀取速率列進行排序,以顯示處于恒定讀取速率下的磁盤。  
  88. # iostat -x | sort -nrk6   
  89. sdj          0.00   0.00  1.86  0.61   56.78   12.80    28.39     6.40    28.22     0.03   10.69   9.99   2.46  
  90. sdah         0.00   0.00  1.66  0.52   50.54   10.94    25.27     5.47    28.17     0.02   10.69  10.00   2.18  
  91. sdd          0.00   0.00  1.26  0.48   38.18   11.49    19.09     5.75    28.48     0.01    3.57   3.52   0.61  
  92. ... and so on ...  
  93. 該資訊可以幫助您查找“熱”磁盤,即進行很多讀取或寫入的磁盤。如果該磁盤的确“熱”,  
  94. 則應确定“熱”的原因;可能是該磁盤上定義的某個檔案系統正在進行大量讀取操作。如果是這種情況,  
  95. 則應考慮将該檔案系統在多個磁盤之間進行條帶化,以分發負載,進而最大程度地減小某個特定磁盤“熱”的可能性。

繼續閱讀