1. 程式人生 > >在linux系統中跟蹤高IO等待

在linux系統中跟蹤高IO等待

原文作者:Jon Buys

       跟蹤大型分散式系統的效能問題,從本質上來講是複雜的。應用為什麼慢?瓶頸在哪裡?以我的經驗,最主要的罪魁禍首之一是高IO等待(即high IO wait)。換一個地方用的話來說:每個人都只是在等待[翻譯參考文獻1]

        高IO等待問題的第一個徵兆通常是系統平均負載。負載均衡的計算都是基於CPU利用率的,即使用或等待CPU的程序數目,當然,在Linux平臺上,程序幾乎都處於不可中斷的睡眠狀態。負載均衡的基線可以解釋為,在一個CPU核的機器上上,該CPU得到充分利用。因此,對於4核機器中,如果系統平均複雜為4,表示該機器有足夠的資源來處理它需要做的工作,當然只是勉強。在相同的4

核系統,如果平均複雜是8,那麼以為這將意味著伺服器系統需要8core才能處理所要做的工作,但現在只有4個核,所以已經超載。

        如果系統顯示平均負載較高,但是CPU的系統(system)和使用者(user)利用率較低,那麼就需要觀察IO等待(IO wait)。在linuc系統上,IO wait對系統負載有較大的影響,主要因為一個或多個核都可能被磁碟IO或網路IO所阻塞,只有當磁碟IO或網路IO完成後,這些核上的任務(即程序)才能進行下去。而這些程序使用ps aux來檢視均處於”D”狀態,即不可中斷的睡眠狀態。

        發現程序在等待IO完成是一回事,驗證高IO wait的原因是另一回事。使用”iostat –x 1”

能夠顯示正在使用的物理儲存裝置的IO情況:

[[email protected]~]$ 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”

[[email protected]~]$ 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”的資料。相比而言,檔案系統/usrawait時間要高一些。我們先來分析一下這個檔案系統,使用命令 fuser -vm /opt ”檢視哪些程序在訪問這個檔案系統,程序列表如下。

[email protected]:/root > fuser -vm /opt

USER        PID ACCESS COMMAND
db2fenc1   1067 ....m db2fmp
db2fenc1   1071 ....m db2fmp
db2fenc1   2560 ....m db2fmp
db2fenc1   5221 ....m db2fmp

       當前伺服器上有112DB2程序正在訪問/opt檔案系統,為簡便起見,列出四項。看來已經找到導致問題的原因,在伺服器上,資料庫配置為可使用速度更快的SAN訪問,作業系統可以使用的是本地磁碟。可以打電話問問DBA(資料庫管理員)怎麼做才能這樣配置。
最後一個組要的注意的是LVM和device mapper。 “Iostat –xN”命令的輸出顯示的是邏輯卷名,但它是可以通過命令”ls –lrt / dev /mapper”查到對映關係表。輸出資訊的第六列中的dm-是與iostat中的裝置名相對應的。
有時候,在作業系統或應用層是沒有什麼可以做的,除了選擇速度更快的磁碟,並沒有其他的選擇。幸運的是,快速磁碟訪問,如SAN或SSD的價格正在逐步下降。
最後一個需要注意的,具體問題具體分析。您需要深刻了解您能的環境,包括物理環境,虛擬環境和應用層架構,這樣才能便於診斷問題。如果有其他方法或方式來解決這類問題,我很想聽聽這些意見。
 

翻譯參考文獻

[1] http://www.goodreads.com/quotes/376564-waiting-for-the-fish-to-bite-or-waiting-for-wind

“Waiting for the fish to bite or waiting for wind to fly a kite. Or waiting around for Friday night or waiting perhaps for their Uncle Jake or a pot to boil or a better break or a string of pearls or a pair of pants or a wig with curls or another chance. Everyone is just waiting.”

 ----------------------------------------

初次翻譯,不足之處,請不吝賜教
----------------------------------------
知識共享許可協議
本作品採用
知識共享署名-非商業性使用-相同方式共享 3.0 未本地化版本許可協議進行許可。

相關推薦

linux系統跟蹤IO等待

原文作者:Jon Buys       跟蹤大型分散式系統的效能問題,從本質上來講是複雜的。應用為什麼慢?瓶頸在哪裡?以我的經驗,最主要的罪魁禍首之一是高IO等待(即high IO wait)。換一個地方用的話來說:每個人都只是在等待[翻譯參考文獻1]。        高IO

linux系統IO操作

同步IO分為阻塞IO、非阻塞IO、訊號驅動的IO和多路轉接IO。阻塞IO: 一直阻塞程序直到完成IO操作。 非阻塞IO: 有資料時進行IO操作,沒有資料時立即返回不阻塞程序。 訊號驅動IO: 當有資料到來是傳送訊號給程序執行IO操作,提高CPU的利用率。當設定開啟檔案描述字

Cgroup限制CPU、IO、記憶體以及linux系統的排程策略

一、CPU 1、0核利用 思路: 0核是必須要保護的,否則各種系統命令、喂狗都可能出問題;    &

老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統LVM配置實現方法?

邏輯卷管理 磁盤 每日一題 1.題目老男孩教育每日一題-2017年5月12日-磁盤知識點:linux系統中LVM配置實現方法?2.參考答案01:將一個或多個物理分區創建為一個PV# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" success

linux系統定時任務

linu tab 一次 腳本 lin edi 路徑 執行 表示 1、查看所有定時任務:命令:“crontab -l” 數字意思解釋如下:從左到右,依次是:分、時、日、月、星期。 2、編輯定時執行計劃:命令:"crontab -e" ,e表示edit修改的意思。 3、修

Linux 系統這樣修復 SambaCry 漏洞

windows 服務器 解決方案 linux 非官方 導讀Samba 很久以來一直是為 linux 系統上的 Windows 客戶端提供共享文件和打印服務的標準。家庭用戶,中型企業和大型公司都在使用它,它作為最佳解決方案在多種操作系統共存的環境中脫穎而出,由於廣泛使用的工具很可能發生這種情

linux 系統的 /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin 目錄的區別

。。 process pre this 用戶 unix table mount sent 先來段英文的: /bin This directory contains executable programs which are needed in single user

Linux 系統安裝Mysql_5.6

上傳 粘貼 啟動mysql grant ont linu chm cli char Linux 系統中安裝Mysql_5.6 安裝包下載地址(http://pan.baidu.com/s/1o8G5q

Linux系統安裝vmTools

cdr cdrom linu 是否 壓縮 進入 span pan tin 以下是,會用到的命令、遇到的問題及解釋: 在虛擬機中安裝centOS系統,因為後續安裝服務或者其他的東西,因此需要安裝vmTools,方便將文件從宿主電腦拖進虛擬機內。(我的是tar壓縮包的vmToo

Linux系統有關/dev/null和/dev/zero文件說明及實踐

linux /dev/null 特殊文件 /dev/zero Linux系統中有關/dev/null和/dev/zero文件說明提示:這個題目完全可以作為一個面試題考考運維的應聘者:面試題:請解釋Linux中/dev/null和/dev/zero兩個文件的作用和區別。在類Unix操作系統中,

運維學習之Linux系統的文件傳輸、歸檔、壓縮

linux不同系統之間的文件傳輸1.文件歸檔1.文件歸檔,就是把多個文件變成一個歸檔文件2.tar c ##創建 f ##指定歸檔文件名稱 t ##顯示歸檔文件中的內容 r ##向歸檔文件中添加文件 --get ##取出單個文件 --delete ##刪除單個文件 x ##取出歸檔文件中的所有內容

Linux系統如何查看日誌信息

日誌文件 系統日誌 楊書凡 日誌文件是用於記錄Linux系統中各種運行消息的文件,不同的日誌文件記載了不同類型的信息,對於診斷和解決系統中的問題很有幫助分析日誌文件 日誌數據主要包括三種類型:內核及系統日誌、用戶日誌、程序日誌 #對於大多數的文本格式的日誌文件,使用tail、more、l

Linux系統修改/etc/profile文件的方法

linux在Linux系統中etc/profile文件一般是不能更改的,想要更改etc/profile文件就要用一些特殊的技巧進行Linux文件修改。本文就來介紹一下Linux系統中修改/etc/profile文件的方法:etc/profile文件是只讀的,直接用vi或gedit打開修改後是無法保存的。要修改

Linux系統svn服務器設置開機啟動

數據庫 檢查 reat version 打開端口 rest grep 建立 標簽 安裝完svn服務器後雖然好用但是因為經常重啟Linux服務器,每次重啟完就要去手動啟動svn服務器,很是麻煩,於是在網上找了一些方法後,自己把svn服務器設置成開機啟動 步驟一:安裝svn服務

Linux系統終端的入口

配置 bash 需求:登陸通過SSH登陸Linux主機,主機只能執行特定腳本或程序,如何約束?首先配置/etc/bash.bashrc 該文件每次打開新的shell都會執行該文件;添加執行腳本或程序路徑到bash.bashrc文件;對於腳本或程序,不能有退出程序的語句,異常情況下也要保持在腳本或程序裏

Linux系統實現CA

linux、創建ca前言 CA是證書的簽發機構,它是PKI的核心。CA是負責簽發證書、認證證書、管理已頒發證書的機關。它要制定政策和具體步驟來驗證、識別用戶身份,並對用戶證書進行簽名,以確保證書持有者的身份和公鑰的擁有權。。 CA 也擁有一個證書(內含公鑰)和私鑰。網上的公眾用戶通

Linux系統安裝MySQL數據庫操作手冊

linux mysql數據庫 Linux系統中MySQL數據庫安裝手冊一、安裝概述: 在Linux操作系統中安裝MySQL數據庫是一個我們必須要掌握的一門技術,也決定了你以後找工作的薪資待遇,所以你知道它的厲害了吧!學會安裝只是第一步,你還得學好數據庫的基本操作,以及搭建一個數據庫的主從配置等等

Linux系統MySQL數據庫“主從”配置

linux mysql數據庫主從配置 MySQL數據庫“主從”配置一、配置概述: 在Linux操作系統中配置MySQL數據庫的主從復制是很重要的,為什麽這樣說呢!是因為在你搭建一個服務器以後你配置了2臺數據庫,一主一從。2臺數據庫配置好以後,當其中一臺數據庫被攻擊以後,你被攻擊的這臺數據庫的數據

Linux系統內對CPU的監控及日誌分析

文件 mos anti sage them 其中 generate ted cpu 使用linux系統時,占用cpu資源過高和,用腳本排查: 1,實時監控,一旦有cpu占用高的進程,程序啟動; 2,再對進程分析,得出對應線程; 3,對對應線程所在的程序日誌文檔進行分析,比如

linux系統如何進入退出vim編輯器的方法及區別

sig bili 編輯器 html enter mil erl convert dstat 在linux家族中,vim編輯器是系統自帶的文本編輯器,其功能強大自不必說了。 偶有小白,剛接觸linux,要修改某個文本文件,不可能像WINDOWS那樣操作