在linux系統中跟蹤高IO等待

來源:互聯網
上載者:User

在linux系統中跟蹤高IO等待        跟蹤大型分布式系統的效能問題,從本質上來講是複雜的。應用為什麼慢?瓶頸在哪裡?以我的經驗,最主要的罪魁禍首之一是高IO等待(即high IO wait)。換一個地方用Dr. Seuss的話來說:每個人都只是在等待[翻譯參考文獻1]。        高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或網路IO完成後,這些核上的任務(即進程)才能進行下去。而這些進程使用ps aux來查看均處於”D”狀態,即不可中斷的睡眠狀態。        發現進程在等待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的價格正在逐步下降。     最後一個需要注意的,具體問題菊粉。您需要深刻瞭解您能的環境,包括實體環境,虛擬環境和應用程式層架構,這樣才能便於診斷問題。如果有其他方法或方式來解決這類問題,我很想聽聽這些意見。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.