
上期我們講到LoaRunner性能測試內存監控,這期我們講LoaRunner性能測試磁盤監控。
磁盤監控
在介紹磁盤監控前,先介紹固定磁盤存儲管理的性能,固定磁盤存儲器的結構層次如圖所示。

每個單獨的磁盤驅動器稱為一個物理卷(PV)它們各有一個名稱,例如/dev/hdisk0,如果物理卷在使用,那么它屬于一個卷組(VG)卷組中所有物理卷劃分成相同大小(如果卷組包含的物理卷小于4GB,則缺省值是4MB,對于更大的磁盤該值為8MB或更多)的物理分區(PP)。
根據空間分配的用途,每個物理卷可以分成五個區域,根據磁盤驅動器的不同,每個區域中物理分區的數量也不同。在每個卷組中定義一個或多個邏輯卷(LV),每個邏輯卷由一個或多個邏輯分區組成,每個邏輯分區至少對應一個物理分區,如果指定為邏輯卷制作鏡像,就需要分配額外的物理分區存儲每個邏輯分區的額外副本,雖然邏輯分區是連續編號的,但底層的物理分區不必連續或鄰接。 邏輯卷為系統用途提供服務(例如頁面調度),但是每個容納常規系統數據或用戶數據或程序的邏輯卷都包含一個單獨的日志文件系統(JFS或增強型JFS),每個JFS由頁大小(4096字節)塊的池組成。當數據要寫入某個文件中時,會為這個文件分配一個或多個額外的塊,這些塊彼此和與先前分配給這個文件的其它塊之間可能鄰接也可能不鄰接。
圖中顯示了一個文件系統中可能發生的糟糕情況,這個文件系統已經使用了很長時間且沒有重新組織過,文件/op/filename物理記錄在很多塊上,這些塊在物理位置上相互遠離,不是鄰接的,順序讀取這個文件將導致許多費時的尋道操作。雖然操作系統的文件在概念上是一個順序且鄰接的字節字符串,但物理實現可能非常不同,在一個文件系統中對邏輯卷的多次擴展和分配/釋放/再分配活動可能出現磁盤分段,當一個文件系統的可用空間由大量小塊空間組成,那么就會出現碎片,就不可能在鄰接的塊中寫出新的文件。
在高度碎片化的文件系統中訪問文件可能導致大量的尋道操作和較長的I/O響應時間(尋道等待時間決定I/O響應時間),例如,如果順序訪問文件,那么由大量廣泛分散的小塊組成的文件布局比文件塊緊密相連的布局需要更長的尋道時間,當文件緩存在內存中時,文件布局對于I/O性能的影響減小,在操作系統中打開一個文件時,它被映射到虛擬內存中一個永久數據段,這個段代表該文件的虛擬緩沖區,文件的塊直接映射到段的頁面中,VMM管理段頁面,根據需要讀取文件塊到段頁面中(當它們被訪問時)。有幾種環境會導致VMM將一頁寫回到磁盤上文件中相應的塊,但如果某塊最近已經被訪問,VMM通常會在內存中保留該頁,因此,頻繁訪問的頁傾向于在內存中停留較長時間,所以不需要物理磁盤訪問就可以滿足對相應塊的邏輯文件訪問,在某些地方,用戶或系統管理員可以選擇在邏輯卷中重新組織文件布局以及在物理卷中重新組織邏輯卷布局,從而減少磁盤碎片以及更均勻地分配總的I/O負載。
關于磁盤的監控應該重點考慮以下幾方面的內容:第一:查找當前最活躍的文件、文件系統和邏輯卷 a)“熱”文件系統是定位在一個物理驅動器上還是分散在多個物理驅動器上; b)調頁空間是否支配磁盤應用? c)是否有足夠的內存來高速緩存那些由正在運行進程使用的文件頁面? d)應用程序是否執行許多同步(非高速緩存)的文件I/O? 第二:查看使用率最高的物理卷 第三:測試磁盤讀寫時間 一般的在對磁盤配置或調整參數做出重要改動之前,需要先對當前的配置和性能進行監控,得到一條評估的基線數據。 在系統處于工作負載高峰時期或者運行一個關鍵應用程序時,可以使用帶間隔時間參數的iostat命令來開始評估。 iostat53報告如圖所示。

注意:如果在Linux未發現該命令,那么需要先安裝sysstat包安裝命令為rpm–ivhsysstat-7.0.2-3.el5.i386sysstat包中包括iostat、mpstat、sar和sa四個工具。
關于CPU統計信息列(%usr、%sys、%idle和%iowait)提供了CPU使用的情況,該信息也在vmstat命令輸出信息中存在,其對應的列名為us、sy、id和wa。在運行一個應用程序的系統上,I/O等待時間的高百分比可能與工作負載有關,在具有很多進程的系統上,一些可能在運行,而另一些可能在等待I/O,在這種情況下,%iowait可能很小或者為零,因為正在運行的進程“隱藏”了一些等待時間,但是%iowait并不代表磁盤可能不存在瓶頸。如果iostat命令表明CPU受限的情況不存在,并且%iowait時間大于20%,則可能出現I/O或磁盤受限情況,這一情況可能在缺少實內存的情況下由過多調頁產生,也可能是由于不平衡的磁盤負載、碎片數據或應用模式而產生,對一個不平衡負載來說,同樣的iostat報告提供了必要的信息,但是有關文件系統或邏輯卷,即邏輯資源來說,必須有使用諸如filemon或fileplace工具來獲取信息。 如果需要指定磁盤名稱,可以使用-d選項。 例如:iostat–dsda1,報告如圖所示。

-tps表示每秒鐘物理磁盤傳送的次數,一次傳送是從設備驅動程序到物理磁盤的一次I/O處理請求,多重邏輯請求可以組合成單一的磁盤I/O請求,傳送的大小是不確定的。-Blk_read/s顯示在測量間隔中每秒鐘從物理卷中讀取的數據量(以KB/s為單位)。-Blk_wrtn/s顯示在測量間隔中每秒寫入物理卷的數據量(以KB/s為單位)。-Blk_read顯示在測量間隔中總的從物理卷中讀取的數據量(以KB為單位)。-Blk_wrtn顯示在測量間隔中總的寫入物理卷的數據量(以KB為單位)。
使用vmstat命令也可以監控磁盤的性能,關于vmstat命令的使用在cpu章節中進行了詳細的介紹,這里就不詳細介紹了,關于vmstat命令輸入報告中需要重點關注in列的內容,in列的內容表示評估間隔中(每秒)發生的硬件或設備中斷的次數,中斷的示例為磁盤請求完成和10毫秒的時鐘中斷,即一秒鐘發生100次中斷。sar命令是用來收集關于系統的統計數據的標準UNIX命令,通過該命的-d選項,可以詳細的查看磁盤I/O的統計信息。例如sar –d 3 3的報告如圖所示。

%busy服務傳送請求時,時間設備繁忙程度。avque那段時間內所有從適配器到設備的未完成請求的平均數,可能有附加的I/O操作在設置驅動程序隊列中,如果存在瓶頸,這個數字將是一個很好的指示符。r+w/s進出設備的讀/寫傳送次數,這同iostat命令中的tps列內容一致。blks/s以512字節為單位傳送的字節數。Avwait事物等候服務的平均次數(隊列長度),傳送請求在隊列中空等候的平均時間(以毫秒為單位)。avserv平均每次搜索的毫秒數,設備服務每次傳送請求的平均時間(包括搜索時間、轉動等待時間和數據傳送時間)(以毫秒為單位)。如果需要測試磁盤寫能力,使用以下命令time dd if=/dev/zero of=/test.dbfbs=8k count=300000因為/dev/zero是一個偽設備,它只產生空字符流,對它不會產生I/O,所以I/O都會集中在of文件中,of文件只用于寫,所以這個命令相當于測試磁盤的寫能力。其中300000表示寫的次數。

如果需要測試磁盤讀能力,使用以下命令time ddif=/dev/sda1 of=/dev/null bs=8kcount=300000因為/dev/sda1是一個物理分區,對它的讀取會產生I/O,/dev/null是偽設備,相當于黑洞,of到該設備不會產生I/O,所以,這個命令的I/O只發生在/dev/sdb1上,也相當于測試磁盤的讀能力。其中300000表示讀的次數。

如果需要測試磁盤同時讀寫能力,使用以下命令time dd if=/dev/sda1 of=/test1.dbf bs=8kcount=300000這個命令下,一個是物理分區一個是實際的文件,對它們的讀寫都會產生I/O(對/dev/sda1是讀,對/test1.dbf是寫),假設他們都在一個磁盤中,這個命令就相當于測試磁盤的同時讀寫能力。其中300000表示讀的次數。

一般來說,高的%iowait表明系統存在一個應用程序問題、缺少內存問題或低效的I/O子系統配置,例如,應用程序的問題可能是由于許多I/O請求,而不是處理許多數據。理解I/O瓶頸并且要清楚解決瓶頸問題的關鍵在于提高I/O子系統的效率。磁盤的靈敏度可以以下幾種方式出現,并具有不同的解決方法,一些典型的解決方案如下:
- 限制在特定的物理磁盤上活動邏輯卷和文件系統的數目,該方法是為了在所有的物理磁盤驅動器中平衡文件I/O;
- 在多個物理磁盤間展開邏輯卷,該方法在當有一些不同的文件被存取時特別有用;
- 為一個卷組創建多個Journaled文件系統(JFS)日志并且把它們分配到特定的文件系統中(最好在快速寫高速緩存驅動器中),這對應用程序創建、刪除或者修改大量文件特別是臨時文件來說十分有用;
- 如果iostat命令的輸出結果表明負載的I/O活動沒有被均衡地分配到系統磁盤驅動器中,并且一個或多個磁盤驅動器的使用率經常在70-80之間或更高,就得考慮重組文件系統,例如備份和恢復文件系統以便減少碎片,碎片將引起驅動器過多地搜索并且可能產生大部分響應時間過長;
- 如果有跡象表明一小部分文件被一次又一次地讀取,可以考慮附加的實存是否允許那些文件更加有效地緩存;
- 如果負載的存取模式是隨機占主導地位,可以考慮增加磁盤并把將那些隨機存取的文件分布到更多更好多的磁盤中;
- 如果負載的存取模式是順序占主導地位并且涉及多個磁盤驅動器,可以考慮增加一個或多個磁盤適配器,也可以適當地考慮構建一個條帶狀邏輯卷來適應大型并且性能關鍵的順序文件;
- 使用快速寫高速緩存設備;
- 使用異步I/O;