複製鏈接
請複製以下鏈接發送給好友

FileMon

鎖定
Filemon 是一款出色的文件系統監視軟件,它可以監視應用程序進行的文件讀寫操作。它將所有與文件一切相關操作(如讀取、修改、出錯信息等)全部記錄下來以供用户參考,並允許用户對記錄的信息進行保存、過濾、查找等處理,這就為用户對系統的維護提供了極大的便利。
中文名
文件系統監視軟件
外文名
FileMon
類    別
文件系統監視軟件
功    能
監視應用程序進行的文件讀寫操作
用    途
監視文件系統性能

FileMon簡介

用途監視文件系統性能,並且報告代表邏輯文件、虛擬內存段、邏輯卷和物理卷的I/O活動 [1] 

FileMon語法

filemon [ -d ] [ -i Trace_File -n Gennames_File] [ -o File] [ -O Levels] [ -P ] [ -T n] [ -u ] [ -v ]

FileMon命令描述

FileMon工作原理

filemon命令監控文件系統和 I/O 系統事件的跟蹤,並且報告一個週期內的文件和 I/O 的訪問性能
在它的一般模式中,當一個或多個應用程序或者系統命令正在被執行監控的時候,filemon 命令在後台運行。filemon 命令自動啓動並且實時監控程序的文件系統和 I/O 事件的跟蹤。作為缺省值,跟蹤是立刻啓動的;可選的是,跟蹤可能被延緩直到用户發出一個 trcon 命令。為了能隨意的關閉和運行監控,用户可以發出 trcoff 和 trcon 命令,當filemon 命令在運行的時候。當跟蹤被 trcstop 命令中止的時候,filemon 命令生成一個 I/O 活動報告並退出。
filemon 命令也可以處理一個跟蹤文件,這個文件已經先前被跟蹤工具所記錄。文件和 I/O 活動報告將會基於那個文件中記錄的事件。
為了更完整的提供一個應用程序的文件系統性能的理解,filemon 命令以下面的四種水平來監控文件和 I/O 活動:
邏輯文件系統 filemon 命令監控在邏輯文件上的邏輯I/O 操作。被監控的操作包括所有的 打開、和lseek等系統調用,這個可能會還是不會導致實際的物理 I/O,取決於這些文件是否在內存中已經被緩衝。I/O 統計信息被保存在一個基本文件中。
虛擬內存系統 filemon 命令監控磁盤上段和它們的映像之間的物理 I/O 操作(也就是,頁面調度)。I/O 統計信息被保存在一個基本段中。
邏輯卷 filemon 命令監控邏輯捲上的 I/O 操作。I/O 統計信息被保存在一個基本的邏輯卷中。
物理卷 filemon 命令監控物理捲上的 I/O 操作。在這個級別上,獲取了物理資源的使用。I/O 統計信息被保存在一個基本的物理卷中。
正如命令行標誌所指定的那樣,這四種級別的任何組合都可以被監控。作為缺省值, filemon 命令只監控虛擬內存邏輯卷和物理卷級別的 I/O 操作。這些級別都與真實的磁盤 I/O 的請求相關。
filemon 命令把它的報告寫到一個標準的輸出或者一個指定的文件上。這個報告以每個被監控級別的 I/O 活動的摘要作為開始,以每個被監控級別的 I/O 活動的詳細統計信息為結束。摘要和詳細報告內容表述在 Reports 部分中。

FileMon注的描述

filemon命令產生的報告可能會相當長。因此,-o 選項經常被用來把報告寫到一個輸出文件上。當打開一個物理設備並被應用程序直接訪問時,只有那些讀和寫的完整的 512 個字節的塊會被反映到報告中。設備驅動程序為了發出設備命令和讀取設備狀態所使用的『簡短』讀和寫都被忽略。光盤驅動器沒有同心的 『磁道』 或者 『柱面』,象在固定文件中那樣。(只有一個螺旋磁道。)因此,不可能根據柱面來報告光盤驅動器的搜索間隔統計信息。
-u 標誌被用來產生先前為了啓動 trace守護進程而打開的文件上的報告。這個數據的一些部分可能是很有用的,但是大部分的都應用到了守護進程和其它不相關的活動中去了。這個背景信息可以是壓倒性的,特別是在大的系統中。如果 /unix 文件和正在運行的內核不是一樣的,那麼內核地址可能是不正確的,會導致filemon命令退出。當從一個 shell腳本中使用 filemon 命令時,允許在顯示filemon輸出文件的內容之前有一個輕微的延遲。filemon 命令可能會花費幾秒鐘來產生這個報告。
系統跟蹤工具
filemon命令使用系統跟蹤工具獲得原始的 I/O性能資料。通常地,跟蹤工具只支持一個輸出流。因此,只有一個 filemon 或者跟蹤進程能在一個時間是激活的。如果另外一個filemon或者跟蹤進程已經在運行,filemon 命令會響應下列的消息:
/dev/systrace: Device busy當監控很強的 I/O 應用程序時,filemon命令可能不能實時地處理產生的跟蹤事件。當上面的情況發生時,錯誤消息如下:
Trace kernel buffers overflowed, N missed entries這個消息將顯示在 stderr上,標誌着當跟蹤緩衝區滿的時候到底有多少跟蹤事件被丟失。filemon 命令將繼續監控 I/O 活動,但是報告的精確性降低到了某個未知程度。一個避免溢出的方法是監控文件和 I/O 子系統的較少的級別:跟蹤事件產生的數目是與監控級別的個數成比例的。另外,跟蹤緩衝區的大小可以通過使用 -T 選項來增加,這樣就能在溢出前提供更大的跟蹤事件容量。記住增加跟蹤緩衝區的大小會導致更多的引腳內存,並且因此可能影響 I/O 和頁面調度的行為。
存儲受限的環境(要求的存儲容量比可供給的內存要多),-P 選項可以被用來引腳內存中的實時 filemon 進程中的文本和資料頁,這樣這些頁面就不會被替換掉。如果不用 -P 選項,允許 filemon 進程被替換掉,filemon 命令的前進可能被延遲,地點是在它不能足夠快地處理跟蹤事件的地方。這個情況導致跟蹤緩衝區如上面情況描述的那樣溢出。當然,插入這個進程將從應用程序(儘管 filemon 命令不是一個大程序,但是它的進程映像也能達到 500KB)中釋放內存。
在使用 filemon 命令去處理一個存在的跟蹤數據文件前,您必須使用 -r 選項在 trcrpt 命令中去把跟蹤資料順序的重寫入一個新的文件。否則,filemon 命令產生下列的錯誤消息然後退出:
error: run 'trcrpt -r' on logfile first-i Trace_File 和 -n Gennames_File 標誌允許跟蹤數據文件的 filemon脱機處理,這些文件是利用 trace 命令創建的。如果有一個存在,兩個標誌都必須指定。當必須後期處理一個來自遠程機器的跟蹤文件或者在一個時間執行跟蹤資料收集工作而在另一個時間後期處理它的時候,這些標誌是很有效的。當系統負載很大或者 filemon 丟失了跟蹤 hook 時,這些標誌也是很有用的。
gennames 文件(包括文件系統信息)必須使用在跟蹤來源處的機器上。而且,在與系統跟蹤文件創建接近的時刻運行 gennames 是明智的,這樣兩個系統配置就是一樣的了。
與 filemon 相關的跟蹤 hook 必須被 trace 命令所收集並且被 trace -j 標誌所指定。當filemon 以 -v 標誌調用時,相關的跟蹤 hook 會列出。包含 -f 選項的 gennames 命令將被執行,它的輸出被保存在 Gennames_File 中以收集 filemon 的附加消息。-f 選項被用來和 gennames 命令一起去收集邏輯卷和物理卷的設備信息。它也用來獲取脱機的 filemon 使用的虛擬文件系統的信息。一旦執行了 trace 命令,trcrpt -r 必須在跟蹤日誌文件上運行並重定向到另外一個文件中。那麼該文件和 Gennames_File 就可能提供給 filemon。

FileMon報告

FileMon摘要

每個由 filemon 命令生成的報告有一個指示日期、機器名稱和按秒計數的監控週期長度的報頭。在監控週期內的 CPU 使用情況也在報告中體現。
下一個,對每個被監控的文件系統級別,都會生成摘要報告。作為缺省值邏輯文件和虛擬內存的報告分別限制在最多 20 個活動文件和段,可以通過轉換數據的總數量來計算該數目。如果指定了 -v 標誌,所有文件和段的活動都會被報告。每個報告文件、段或者卷都有一行。四個摘要報告的每一行的欄都描述如下:
最活動的文件報告
欄 描述
#MBS 到/從文件中傳輸的兆字節的總數量。這些行以遞減的順序按該字段排序。
#opns 在評估週期內,文件被打開的次數。
#rds對文件的系統讀取調用數目。
#wrs 對文件的系統寫入調用數目。
file 文件名(完整的路徑名稱在詳細報告中)。
volume:inode 包含文件和文件 i 節點數目的卷的名稱。該字段可以用來把一個文件和它的相應的持久段聯繫起來,在虛擬內存I/O 報告中顯示。該字段可以是空的;例如,對於在執行過程中創建和刪除的臨時文件。
最活動的段報告
欄 描述
#MBS 從/到段的傳輸的兆字節的總共數目。這些行以遞減的順序按該字段排序。
#rpgs 從磁盤(也就是頁)讀入到段的那些 4096 個字節的頁的數目。
#wpgs 從段寫入到磁盤(到處頁)的那些 4096 個字節的頁的數目。
segid 段的內部標識。
segtype 輸入段:工作段、持久段(本地文件)、客户機段(遠程文件)、頁面表段、系統段、或者特殊的永久段,這些特殊的段包含文件系統數據(日誌、根目錄、.inode、.inodemap、.inodex、.inodexmap、.indirect、.diskmap)。
volume:inode 對持久的段來説,包含關聯文件的卷的名字和文件的 i 節點數目。該字段可以用來把一個永久段和它的相應文件聯繫起來,在文件 I/O 報告中顯示。該字段對非持久段來説是空的。
注:
虛擬內存分析工具,svmon可以用來顯示關於一個給定段標誌(segid)的段的更多信息,如下:
svmon-S <segid>
最活動的邏輯卷報告
欄 描述
#rblk 從卷中讀入的 512 字節的塊的數目。
#wblk 寫入卷的 512 字節的塊的數目。
KB/sec 總共的傳輸吞吐量,按千字節每秒。
volume 卷的名稱。
描述 卷的內容:或者是一個文件系統的名字,或者是邏輯卷的類型(調頁、jfslog、引導、或者系統轉儲)。還指示文件系統是否是片段的或者壓縮的。
最活動的物理卷報告
欄 描述
util 卷的使用情況(忙的時間片)。這些行以遞減的順序按該字段排序。
#rblk 從卷中讀入的 512 字節的塊的數目。
#wblk 寫入卷的 512 字節的塊的數目。
KB/sec 總共的卷吞吐量,按千字節每秒。
volume 卷的名稱。
描述 卷的類型,例如,120MB disk、355MB SCSI、或者 CDROM SCSI。
注:
邏輯卷 I/O 請求在物理卷的 I/O 請求之前開始,之後結束。因為這個原因,總共的邏輯卷利用率看起來要比總共的物理卷利用率高一些。

FileMon詳細

最後,為每個被監控的文件系統級別都會產生詳細報告。可以通過傳輸數據的總數量來計算該數目。如果指定了 -v 標誌,所有文件和段的活動都報告。每個被報告的文件、段或者卷都有一個記錄。
一些字段報告一個單獨的值,其他的一些報告表現許多值的分佈情況的統計信息。例如,對所有被監控的讀和寫的請求,響應時間的統計信息都會被保留。平均的、最小的和最大的響應時間和響應時間的標準差被報告出來。標準差用來顯示個別響應時間偏離平均值的程度。大約有三分之二的樣本響應時間是在平均值 - 標準偏差和平均值 + 標準偏差以內。如果響應時間的分佈散佈在較大範圍中,標準偏差相比平均響應時間就會很大。在以下列表中描述了四個詳細報告:
文件狀態詳細報告
欄 描述
FILE 文件名稱。如果可能的話,給出完整的路徑名稱。
volume 包含文件的邏輯卷或者文件系統的名稱。
inode 在文件系統中的文件的 I 節點數目。
opens 監控時打開文件的次數。
total bytes xfrd 從/到文件的讀或者寫操作的字節總數目。
reads 對文件的讀取調用的數目。
read sizes (bytes) 按字節的讀取的傳輸大小的統計信息(avg/min/max/sdev)。
writes 對文件的寫入調用的數目。
write sizes (bytes) 寫入傳輸大小的統計信息。
write times (msec) 寫入的響應時間的統計信息。
seeks 子例程調用 lseek 的數目。
VM 段狀態的詳細報告
欄 描述
SEGMENT 內部的段標識。
segtype 段內容的類型。
segment flags 不同的段屬性。
volume 對永久段來説,包含相應文件的邏輯卷的名字。
inode 對持久段來説,相應文件的 i 節點數目。
reads 讀入段(也就是頁)的 4096 字節的頁的數目。
read times (msec) 按毫秒計的讀取響應時間的統計信息(avg/min/max/sdev)。
read sequences 讀取序列的數目。一個序列就是被連續讀入的頁面的一個字符串。讀取序列的數目是順序訪問數量的一個指示符。
read seq. lengths 按頁面來描述讀取序列長度的統計信息。
writes 從段寫的頁面數目。
write times (msec) 寫入響應時間的統計信息。
write sequences 寫入序列的數目。一個序列就是被連續寫入的頁面的一個字符串。
write seq.lengths 按頁面描述的寫入序列長度的統計信息。
邏輯卷和物理卷狀態的詳細報告
欄 描述
VOLUME 卷的名字。
描述 卷的描述。(如果討論一個邏輯卷則描述內容,如果處理一個物理卷則描述類型。)
reads 對卷的讀取請求的數目。
read sizes (blks) 以 512 字節的塊為單位的讀取傳輸大小的統計信息(avg/min/max/sdev)。
read sequences 讀取序列的數目。一個序列就是能連續讀入和顯示順序訪問數量的 512 字節塊的一個字符串。
read seq. lengths 按塊描述讀取序列長度的統計信息。
writes 對卷的寫入請求的數目。
write sizes (blks) 寫入傳輸大小的統計信息。
write sequences 寫入序列的數目。一個序列就是被連續寫入的 512 字節塊的一個字符串。
write seq. lengths 按塊描述寫入序列長度的統計信息。
seeks 讀取或者寫入請求之前的搜索數目;也可以表達為需要搜索的讀取和寫入總數的百分比。
seek dist (blks) 以 512 字節塊為單位搜索間距統計信息。除了通常的統計信息(avg/min/max/sdev)以外,初始搜索操作(假定從塊 0 作為開始位置)的間距也被單獨報告。這個搜索間隔有的時候會很大,因此單獨報告以避免偏移其他的統計信息。
seek dist (cyls) (只是固定文件。)以磁盤柱面為單位搜索間距的統計信息。
time to next req 按毫秒描述的時間長度的統計信息(avg/min/max/sdev),這個時間是在對卷的連續讀取或者寫入的請求之間。這一欄顯示卷的被訪問率。
throughput 總共的卷吞吐量,按千字節每秒。
utilization 卷的時間片忙。在這個報告中的記錄以遞減的順序按這個字段排序。
標誌
-i Trace_File 從指定的 Trace_File 中讀取 I/O 跟蹤數據,而不是從實時的跟蹤進程。filemon 報告概括了跟蹤文件顯示的系統和週期的 I/O 活動。
注:
跟蹤數據文件通常以循環的方式記錄。如果跟蹤數據環繞舍入,那麼跟蹤的順序開始和結束就可能在文件的中間發生。使用 trcrpt 命令的原始方式來順序重寫數據,這項工作要在調用 filemon 命令之前執行,如下:
trcrpt -r file > new.file為了報告能精確,跟蹤文件必須包括被 filemon 命令所需要的所有 hook。
還必須指定 -n 選項。
-n Gennames_File 為了脱機跟蹤處理而指定一個 Gennames_File。該文件通過運行帶有 -f 選項的 gennames 命令來創建,並且把輸出重定向到一個文件中,如下:
gennames -f > file也必須指定 -i 選項。
-o File 寫 I/O 活動報告到指定的 File,而不是到stdout 文件。
-d 啓動 filemon 命令,但是一直推遲跟蹤直到用户執行 trcon 命令。作為缺省值,跟蹤是立刻啓動的。
-T n 設置內核的跟蹤緩衝區大小為 n 字節。缺省值的大小是 32,000 字節。如果可以,緩衝區的大小可以通過提供更大的事件容量來增加。(一個典型的事件記錄大小是 30 字節。)
注:
內核中的跟蹤驅動程序使用雙緩衝區,這樣事實上就有兩個大小分配為 n 字節的緩衝區。而且,注意這些緩衝區是插入到存儲器中的,所以它們不受頁面調度支配。大的緩衝區可能會影響頁面調度和其他 I/O 的性能。
-P 在存儲器中插入監控進程。-P 標誌導致 filemon 命令的文本和數據頁按監控週期的時間插入到存儲器中。使用該標誌可以保證當運行一個存儲受限環境時,實時的 filemon 過程不會 page out。
-v 在報告中打印額外的信息。-v 標誌最重要的影響是被訪問的所有的邏輯文件和所有的段都包括在了 I/O 活動報告中,而不是僅僅有最多 20 個活動文件和段。
-O Levels 只監控指定的文件系統級別。有效的級別標識是:
lf
邏輯文件級別
vm
虛擬內存級別
lv
邏輯卷級別
pv
物理卷級別
all
lf, vm, lv, pv的簡單表示
vm、lv,和 pv 級別都是默認的缺省值。
-u 關於將在 trace守護進程的啓動之前先打開的文件的報告。進程標識(PID)和文件描述符(FD)被文件名所代替。
注:
既然 PIDs 和 FDs 都是可重用的,那麼就有可能看到以相同名字的字段報告的不同文件。

FileMon示例

要監控文件系統的虛擬內存、邏輯卷和物理卷級別的物理 I/O 活動,請輸入:
filemonfilemon 命令自動啓動系統跟蹤並且把它放到後台。該命令後,輸入在這個時刻要運行的應用程序和系統命令,請輸入:
trcstop在執行了trcstop 命令後,I/O 活動報告就會顯示在標準的輸出設備上(但是可能無法滾屏)。虛擬內存的 I/O 報告會被限制在可能導致最多 I/O 的 20 個段。
要按所有的文件系統級別來監控活動,並把報告寫入到文件 fmon.out 中,請輸入:
filemon -o fmon.out -O allfilemon 命令自動啓動系統跟蹤並且把它放到後台。該命令後,要輸入在這個時刻要運行的應用程序和系統命令,請輸入:
trcstop在執行了 trcstop 命令後,I/O 活動報告被寫入fmon.out 文件中。所有的四個級別的文件和 I/O 系統(邏輯文件、虛擬內存、邏輯卷和物理卷級別)都會被監控。邏輯文件和虛擬內存的 I/O 報告限制在導致最多 I/O 的 20 個文件和段(分別地)。
要監控在所有文件系統級別上的活動,並且把一個詳細的報告寫到文件 fmon.out 中,請輸入:
filemon -v -o fmon.out -O allfilemon 命令自動啓動系統跟蹤並且把它放到後台。該命令後,輸入在這個時刻要運行的應用程序和系統命令,請輸入:
trcstop除了詳細的報告是生成在文件 fmon.out 中的以外,本例和前面的一個例子是類似的。主要的區別在於 filemon 命令將指出它正在啓動跟蹤的步驟,並且摘要和詳細信息的報告將包括所有導致任何的 I/O(可能有很多)的文件和段,而不是隻有最多 20 個。
要報告先前記錄的一個跟蹤會話捕獲的 I/O 活動,請輸入:
filemon -i trcfile | pg在本示例中,filemon 命令從輸入文件 trcfile中讀取文件系統跟蹤的事件。輸入文件必須已經是初始的跟蹤格式,作為運行 trcrpt -r 命令的一個結果。既然跟蹤數據已經在一個文件中被捕捉,filemon 命令就不再把它自己放置到後台以使其他的應用程序能夠運行。整個文件讀取後,一個關於虛擬內存、邏輯卷和物理卷級別的 I/O 活動報告將會被顯示在標準輸出(這種標準輸出,在本例中,是通道 pg)。
要只監控邏輯和物理卷的 I/O 活動,同時使用 trcon 和 trcoff 命令控制監控的間隔,請輸入:
filemon -d -o fmon.out -O pv,lvfilemon 命令自動啓動系統跟蹤並且把它放到後台。該命令之後,輸入要在這個時刻運行的不被監控的應用程序和系統命令,請輸入:
trcon在該命令後,輸入要在這個時刻運行的被監控的應用程序和系統命令,請輸入:trcstop在本示例中,-O 標誌只被用來限制監控邏輯和物理卷。只有那些與邏輯和物理卷相關的跟蹤事件才被啓用。而且,作為使用 -d 標誌的一個結果,監控最初是被延緩一直到執行了 trcon 命令。通過使用 trcoff 和 trcon 命令,系統跟蹤可以被間斷地禁用和重啓用,這樣就能只監控特殊的間隔。
為了在脱機方式下運行 filemon,分別運行trace 和 gennames 命令,然後把從那些命令中得到的輸出作為 filemon 命令的輸入,如下:
trace -a -T 768000 -L 10000000 -o trace.out -j 000,000,001,002,003,005,006,139,102,10C,106,00A,107,
101,104,10D,15B,12E,130,163,19C,154,3D3,1BA,1BE,1BC,10B,221,1C9,222,228,232,45B運行被監控的應用程序和系統命令,請輸入:
trcstop然後格式化文件 trace:
trcrpt -r trace.out > trace.rpt創建文件 gennames:
gennames -f > gennames.out然後運行 filemon 附帶着 -i 和 -n 標誌:
filemon -i trace.rpt -n gennames.out -O all
參考資料