Filemon 是一款出色的檔案系統監視軟體,它可以監視應用程式進行的檔案讀寫操作。它將所有與檔案一切相關操作(如讀取、修改、出錯信息等)全部記錄下來以供用戶參考,並允許用戶對記錄的信息進行保存、過濾、查找等處理,這就為用戶對系統的維護提供了極大的便利。
filemon [ -d ] [ -i Trace_File -n Gennames_File] [ -o File] [ -O Levels] [ -P ] [ -T n] [ -u ] [ -v ]
在它的一般模式中,當一個或多個應用程式或者系統命令正在被執行和監控的時候,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 活動的詳細統計信息為結束。摘要和詳細報告內容表述在 Reports 部分中。
-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 命令生成的報告有一個指示日期、機器名稱和按秒計數的監控周期長度的報頭。在監控周期內的 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-S <segid>
最活動的邏輯卷報告
欄 描述
#rblk 從卷中讀入的 512 位元組的塊的數目。
#wblk 寫入卷的 512 位元組的塊的數目。
KB/sec 總共的傳輸吞吐量,按千位元組每秒。
volume 卷的名稱。
描述 卷的內容:或者是一個檔案系統的名字,或者是邏輯卷的類型(調頁、jfslog、引導、或者系統轉儲)。還指示檔案系統是否是片段的或者壓縮的。
最活動的物理卷報告
欄 描述
util 卷的使用情況(忙的時間片)。這些行以遞減的順序按該欄位排序。
#rblk 從卷中讀入的 512 位元組的塊的數目。
#wblk 寫入卷的 512 位元組的塊的數目。
KB/sec 總共的卷吞吐量,按千位元組每秒。
volume 卷的名稱。
描述 卷的類型,例如,120MB disk、355MB SCSI、或者 CDROM SCSI。
注:
最後,為每個被監控的檔案系統級別都會產生詳細報告。可以通過傳輸數據的總數量來計算該數目。如果指定了 -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 級別都是默認的預設值。
注:
既然 PIDs 和 FDs 都是可重用的,那么就有可能看到以相同名字的欄位報告的不同檔案。
要監控檔案系統的虛擬記憶體、邏輯卷和物理卷級別的物理 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