filemon 命令
用途
监视文件系统的性能,并且报告代表逻辑文件、虚拟内存段、逻辑卷和物理卷的 I/O 活动。
语法
filemon [ -d ] [ -i Trace_File -n Gensyms_File ] [ -o File ] [ -O Levels ] [ -w ] [ -I count:interval ] [ -P ] [ -T n ] [ -u ] [ -v ] [ -@ [ WparList | ALL ] [ -r RootString ] [ -A -x User_Command ]
描述
filemon 命令监视文件系统和 I/O 系统事件的跟踪,并且报告一个周期内的文件和 I/O 的访问性能。
在它的一般模式中,当一个或多个应用程序或者系统命令正在被运行和监视的时候,filemon 命令在后台运行。 filemon 命令自动启动并且实时监视程序文件系统和 I/O 事件的跟踪。 作为缺省值,跟踪是立刻启动的;可选的是,跟踪可能被延缓直到您发出一个 trcon 命令。 当 filemon 命令正在运行时,您可以根据需要发出 trcoff 和 trcon 命令来关闭和打开监视功能。 当 trcstop 命令停止跟踪时, filemon 命令生成 I/O 活动报告并退出。
filemon 命令也可以处理一个跟踪文件,此文件已经先前被跟踪工具所记录。 文件和 I/O 活动报告将会基于那个文件中记录的事件。
为了完整地提供一个应用程序的文件系统性能的理解,filemon 命令以下面的四种水平来监视文件和 I/O 活动:
| 项 | 描述 |
|---|---|
| 逻辑文件系统 | filemon 命令监视在逻辑文件上的逻辑 I/O 操作。 受监视的操作包括所有 read, write, open和 lseek 系统调用,这可能导致也可能不会导致实际物理 I/O ,具体取决于文件是否已在内存中缓冲。 I/O 统计信息被保存在一个基本文件中。 对异步 I/O 系统调用的调用不受 filemon 命令监视,因此 filemon 逻辑文件报告不包含异步 I/O (AIO) 请求。 |
| 虚拟内存系统 | filemon 命令监视磁盘上段和它们的映像之间的物理 I/O 操作(也就是,页面调度)。 I/O 统计信息被保存在一个基本段中。 |
| 逻辑卷 | filemon 命令监视逻辑卷上的 I/O 操作。 I/O 统计信息被保存在一个基本的逻辑卷中。 |
| 物理卷 | filemon 命令监视物理卷上的 I/O 操作。 在此级别上,获取了物理资源的使用。 I/O 统计信息被保存在一个基本的物理卷中。 |
正如命令行标志所指定的那样,这四种级别的任何组合都可以被监视。 作为缺省值,filemon 命令只监视虚拟内存、逻辑卷和物理卷级别的 I/O 操作。 这些级别都与真实的磁盘 I/O 的请求相关。
filemon 还对文件、逻辑卷和物理卷生成热报告。 可通过使用 –O 热选项来生成该热报告。 仅在自动脱机和手动脱机方式下支持此报告。 热报告包含文件、逻辑卷和物理卷的 I/O 操作的统计信息。 此报告帮助您对任何驱动器决定要移动哪些文件/逻辑卷(基于文件/逻辑卷的热度,驱动器具有不同 I/O 特征)。 基于下列各项,确定该热度:读操作数、每个读操作读取的平均字节数、读取序列数以及平均序列长度。
filemon 命令将它的报告写到一个标准的输出或者一个指定的文件上。 缺省情况下该报告包含被监视的每个级别的 I/O 活动的摘要。 仅当启用 -O detailed 标志时,才会显示详细报告。 报告 部分中描述了摘要和详细报告内容。
- filemon 命令生成的报告可能会很长。 因此,-o 选项将用来将报告写到一个输出文件上。 当打开一个物理设备并被应用程序直接访问时,只有那些读和写的完整的 512 个字节的块会被反映到报告中。 设备驱动程序为了发出设备命令和读取设备状态所使用的“简短”读和写都被忽略。 光盘驱动器没有同心的“磁道”或“柱面”,象在固定文件中那样。 (只有一个螺旋磁道。) 因此,不可能根据柱面来报告光盘驱动器的间隔统计信息。
- -u 标志被用来产生先前为了启动 trace 守护程序而打开的文件上的报告。 此数据的一些部分可能是很有用的,但是大部分的都应用到了守护程序和其他不相关的活动中了。 此背景信息可以是压倒性的,特别是在大的系统中。 如果 /unix 文件和正在运行的内核不是一样的,那么内核地址可能是不正确的,会导致 filemon 命令退出。 从一个 shell 脚本中使用 filemon 命令时,可以在稍微延迟后查看 filemon 输出文件的内容。 filemon 命令可能会花费几秒钟来产生此报告。
- 当您在 I/O 处理程序中指定相对路径以读取或写入文件时,filemon 命令可以将此相对路径解释为从中运行 filemon 命令的目录。 在这样的情况下,I/O 活动报告可能无法显示该文件的正确卷信息(索引节点)。 要避免此问题,请在所有 I/O 处理程序中都使用完整路径。
- filemon 命令不支持固态驱动器 (SSD) 磁盘。 因此,filemon 命令不报告 SSD 磁盘的统计信息。
系统跟踪工具
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)。
-i Trace_File 和 -n Gennames_File 标志可让跟踪数据文件的 filemon 脱机处理,这些文件是利用 trace 命令创建的。 如果存在一个,那么两个标志都必须指定。 当必须后期处理一个来自远程机器的跟踪文件或者在一个时间执行跟踪资料收集工作而在另一个时间后期处理它的时候,这些标志是很有效的。 当系统负载很大或者 filemon 丢失了跟踪 hook 时,这些标志也是很有用的。 可对自动脱机方式使用这些标志。
-r RootString 标志与 -i Trace_File 标志和 -n Gensyms_File 标志相抵触。 除了使用 -r RootString 标志来进行脱机处理,还可将其与 -A 标志配合使用来启用自动脱机方式。
gensyms 文件(包括文件系统信息)必须在跟踪来源处的机器上使用。 而且,在与系统跟踪文件创建接近的时刻运行 gensyms 是明智的,这样两个系统配置就是一样的了。
与 filemon 相关的跟踪 hook 必须被 trace 命令所收集并且被 trace -j 标志所指定。 当 filemon 以 -v 标志启动时,相关的跟踪 hook 会列示。 然后运行附带 -F 选项的 gensyms 命令,将其输出保存在 Gensyms_File 中以收集有关 filemon 的更多信息。 执行 gensyms 命令时附带 -F 选项,以收集有关物理卷和逻辑卷的设备信息。 它也用来获取脱机的 filemon 使用的虚拟文件系统的信息。 那么该文件和 Gensyms_File 就可能提供给 filemon。
报告
每个由 filemon 命令生成的报告有一个指示日期、机器名称和按秒计数的监视周期长度的报头。 在监视周期内的处理器使用情况也在报告中体现。
下一个,对每个被监视的文件系统级别,都会生成摘要报告。 在缺省情况下,逻辑文件和虚拟内存报告限制在 20 个最活跃的文件和段中,可以通过转换数据的总数量来测量。 如果指定了 -v 标志,所有文件和段的活动都报告。 每个报告文件、段或者卷都有一行。 四个摘要报告的每一行的栏都描述如下所示:
最活动的文件报告
| 列 | 描述 |
|---|---|
| #MBS | 传输至/自文件的总兆字节数。 这些行以递减的顺序按该字段排序。 |
| #opns | 在评估周期内,文件被打开的次数。 |
| #rds | 对文件的系统读取调用数目。 |
| #wrs | 对文件的系统写入调用数目。 |
| file | 文件名(完整路径名在详细报告中)。 |
| volume:inode | 包含文件和文件索引节点数目的卷的名称。 该字段可以用来将一个文件和它的相应的持久段联系起来,在虚拟内存 I/O 报告中显示。 该字段可以是空的;例如,对于在执行过程中创建和删除的临时文件。 |
最活动的段报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| #MBS | 从/到段的传输的兆字节的总共数目。 这些行以递减的顺序按该字段排序。 |
| #rpgs | 从磁盘(也就是页)读入到段的那些 4096 个字节的页的数目。 |
| #wpgs | 从段写入到磁盘(到处页)的那些 4096 个字节的页的数目。 |
| segid | 段的内部标识。 |
| segtype | 段类型: 工作段,持久段 (本地文件) ,客户机段 (远程文件) ,页表段,系统段或包含文件系统数据的特殊持久段 (日志,根目录,.inode,.inodemap,.inodex,.inodexmap,.indirect,.diskmap). |
| volume:inode | 对持久段来说,包含关联文件的卷的名称和文件的索引节点数目。 该字段可以用来将一个永久段和它的相应文件联系起来,在文件 I/O 报告中显示。 该字段对非持久段来说是空的。 |
最活动的逻辑卷报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| util | 卷的使用情况(忙的时间片)。 这些行以递减的顺序按该字段排序。 |
| #rblk | 从卷中读入的 512 字节的块的数目。 |
| #wblk | 写入卷的 512 字节的块的数目。 |
| KB/sec | 总共的传输吞吐量,按千字节每秒。 |
| volume | 卷的名称。 |
| description | 卷的内容:或者是一个文件系统的名称,或者是逻辑卷的类型(调页、jfslog、引导、或者系统转储)。 还指示文件系统是否为片段的或者压缩的。 |
最活动的物理卷报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| util | 卷的使用情况(忙的时间片)。 这些行以递减的顺序按该字段排序。 |
| #rblk | 从卷中读入的 512 字节的块的数目。 |
| #wblk | 写入卷的 512 字节的块的数目。 |
| KB/sec | 总共的卷吞吐量,按千字节每秒。 |
| volume | 卷的名称。 |
| description | 卷的类型,例如,120MB disk,355MB
SCSI,或CDROM SCSI. 注: 逻辑卷 I/O 请求在物理卷 I/O 请求之前开始,之后结束。 因为这个原因,总共的逻辑卷利用率看起来要比总共的物理卷利用率高一些。
|
最活动的文件方面报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| #MBS | 传输至/自文件的总兆字节数。 这些行以递减的顺序按该字段排序。 |
| #opns | 在评估周期内,文件被打开的次数。 |
| #rds | 对文件的系统读取调用数目。 |
| #wrs | 对文件的系统写入调用数目。 |
| file | 文件名(完整路径名在详细报告中)。 |
| PID | 打开文件的进程的标识。 |
| Process | 打开文件的进程的名称。 |
| TID | 打开文件的线程的标识。 |
最活动的文件线程方面报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| #MBS | 传输至/自文件的总兆字节数。 这些行以递减的顺序按该字段排序。 |
| #opns | 在评估周期内,文件被打开的次数。 |
| #rds | 对文件的系统读取调用数目。 |
| #wrs | 对文件的系统写入调用数目。 |
| file | 文件名(完整路径名在详细报告中)。 |
| TID | 打开文件的线程的标识。 |
| Process | 打开文件的进程的名称。 |
| PID | 打开文件的进程的标识。 |
最后,为每个被监视的文件系统级别都会产生详细报告。 在缺省情况下,逻辑文件和虚拟内存报告限制在 20 个最活跃的文件和段中,可以通过转换数据的总数量来测量。 如果指定了 -v 标志,所有文件和段的活动都报告。 每个被报告的文件、段或者卷都有一个记录。
一些字段报告一个单独的值,其他的一些报告表现许多值的分布情况的统计信息。 例如,对所有被监视的读和写的请求,响应时间的统计信息都会被保留。 平均的、最小的和最大的响应时间和响应时间的标准差都加以报告。 标准差用来显示个别响应时间偏离平均值的程度。 大约三分之二的采样响应时间介于average - standard deviation和average + standard deviation. 如果将响应时间的分布分散在一个很大的范围内,那么与平均响应时间相比,标准偏差将很大。 在以下列表中描述了四个详细报告:
详细的文本统计信息报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| FILE | 文件名称。 如果可能的话,给出完整路径名。 |
| volume | 包含文件的逻辑卷或者文件系统的名称。 |
| inode | 在文件系统中的文件的索引节点数目。 |
| opens | 监视时打开文件的次数。 |
| total bytes xfrd | 从/到文件的读或者写操作的字节总数目。 |
| reads | 对文件的读取调用的数目。 |
| read sizes (bytes) | 按字节的读取的传输大小的统计信息 (avg/min/max/sdev)。 |
| read times (msec) | 按毫秒计的读取响应时间的统计信息 (avg/min/max/sdev)。 |
| writes | 对文件的写入调用的数目。 |
| write sizes (bytes) | 写入传输大小的统计信息。 |
| write times (msec) | 写入的响应时间的统计信息。 |
| seeks | lseek 子例程调用的次数。 |
详细的 VM 段统计信息报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| SEGMENT | 内部的段标识。 |
| segtype | 段内容的类型。 |
| segment flags | 不同的段属性。 |
| volume | 对永久段来说,包含相应文件的逻辑卷的名称。 |
| inode | 对持久段来说,相应文件的索引节点数目。 |
| reads | 读入段(也就是页)的 4096 字节的页的数目。 |
| read times (msec) | 按毫秒计的读取响应时间的统计信息 (avg/min/max/sdev)。 |
| read sequences | 读取序列的数目。 一个序列就是被连续读入的页面的一个字符串。 读取序列的数目是顺序访问数量的一个指示符。 |
| read seq. lengths | 按页面来描述读取序列长度的统计信息。 |
| writes | 从段写的页面数目。 |
| write times (msec) | 写入响应时间的统计信息。 |
| write sequences | 写入序列的数目。 一个序列就是被连续写入的页面的一个字符串。 |
| write seq.lengths | 按页面描述的写入序列长度的统计信息。 |
详细的逻辑/物理卷统计信息报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| VOLUME | 卷的名称。 |
| description | 卷的描述。 (如果对象是逻辑卷则描述内容,物理卷则描述类型。) |
| reads | 对卷的读取请求的数目。 |
| read sizes (blks) | 以 512 字节的块为单位的读取传输大小的统计信息 (avg/min/max/sdev)。 |
| read times (msec) | 按毫秒计的读取响应时间的统计信息 (avg/min/max/sdev)。 |
| read sequences | 读取序列的数目。 一个序列就是能连续读入和显示顺序访问数量的 512 字节块的一个字符串。 |
| read seq. lengths | 按块描述读取序列长度的统计信息。 |
| writes | 对卷的写入请求的数目。 |
| write sizes (blks) | 写入传输大小的统计信息。 |
| write times (msec) | 写入响应时间的统计信息。 |
| 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 | 卷的时间片忙。 在此报告中的记录以递减的顺序按此字段排序。 |
详细的进程方面统计信息报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| Process Id | 打开文件的进程的标识。 |
| Name | 打开的文件的名称(包括路径)。 |
| Thread Id | 打开文件的线程的标识。 |
| Total Bytes | 读/写的总字节数。 |
| # of seeks | 搜寻次数。 |
| # of reads | 读操作数。 |
| read errors | 读错误数。 |
| # of writes | 写操作数。 |
| Bytes Read | 读取的字节数。
|
| Bytes Written | 写入的字节数。
|
| Read Time | 读操作所花时间。 |
| Write Time | 写操作所花时间。 |
详细的线程方面统计信息报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| Thread Id | 打开文件的线程的标识。 |
| Name | 打开的文件的名称(包括路径)。 |
| Process Id | 打开文件的线程的标识。 |
| Total Bytes | 读/写的总字节数。 |
| # of seeks | 搜寻次数。 |
| # of reads | 读操作数。 |
| read errors | 读错误数。 |
| # of writes | 写操作数。 |
| Bytes Read | 读取的字节数。
|
| Bytes Written | 写入的字节数。
|
| Read Time | 读操作所花时间。 |
| Write Time | 写操作所花时间。 |
整理的报告格式
| 项 | 描述 |
|---|---|
| ID |
|
| transaction type | 事务类型:SCSI、SSA 等等。 |
| time |
|
| read/write | 操作类型:读取或写入。 |
| physical block address | 物理块地址。 |
| access pattern | 访问类型:模式、顺序或随机。 |
| physical block size | 物理块大小。 |
| volume name or address |
|
| Transaction index | 用于标识事务的唯一标识。 |
| time |
|
| ID |
|
| protocol stage | 显示事件的中断。 |
| name | 设备、缓冲区或块的名称或字节计数。 |
| address/count | 设备、缓冲区或块的地址或字节计数。 |
| access pattern | 访问模式类型:顺序或随机。 |
| label | 卷类型或传输标志。 |
| values | 卷名称或标志值。 |
热报告
热报告由以下三部分组成:信息部分、摘要部分以及热报告部分。 信息部分包含系统模型、使用的 filemon 命令和使用的 trace 命令。 摘要部分包含下列各项:总读/写操作数、总耗用时间、总读/写数据量以及 CPU 利用率。
热文件报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| Name | 文件名称。 |
| Size | 文件的大小。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 |
| CAP_ACC | 已访问的容量。 此值是文件中所访问的唯一数据。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 |
| IOP/# | 访问的每个单位数据的 I/O 操作数。 可从 –O 单位选项获取数据的单位。 缺省单位是 MB。 此列的值示例为 2560/T, 256/G, 0.256/M和 0.000/K。 字母 K , M , G 和 T 代表 KB , MB , GB 和 TB。 |
| LV | 文件所属逻辑卷的名称。 如果无法获取此信息,那么会报告“-”。 |
| #ROP | 文件上发生的总读操作数。 |
| #WOP | 该文件上发生的总写操作数。 |
| B/ROP | <最小、平均、最大> 每次读取操作读取的字节数。 |
| B/WOP | <最小、平均、最大> 每次写操作读取的字节数。 |
| RTIME | <最小、平均、最大> 每次读取操作所用的时间(毫秒)。 |
| WTIME | <最小、平均、最大> 每次写入操作所用的时间(毫秒)。 |
| Seqlen | 读取序列的<最小、平均、最大>长度。 |
| #Seq | 读取序列的数目。 序列是连续地读取(换入)的一系列 4K 页面。 读取序列的数目是顺序访问数量的一个指示符。 |
热逻辑卷报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| Name | 逻辑文件的名称。 |
| Size | 逻辑卷的大小。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 如果无法获取此值,那么会报告 “-“。 |
| CAP_ACC | 已访问的容量。 此值是文件中所访问的唯一数据。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 |
| IOP/# | 访问的每个单位数据的 I/O 操作数。 可从 –O 单位选项获取数据的单位。 缺省单位是 MB。 此列的值示例为 2560/T, 256/G, 0.256/M和 0.000/K。 字母 K , M , G 和 T 分别代表 KB , MB , GB 和 TB。 |
| #Files | 此逻辑卷中所访问的文件数。 |
| #ROP | 该逻辑卷上发生的总读操作数。 |
| #WOP | 该逻辑卷上发生的总写操作数。 |
| B/ROP | <最小、平均、最大> 每次读取操作读取的字节数。 |
| B/WOP | <最小、平均、最大> 每次写操作读取的字节数。 |
| RTIME | <最小、平均、最大> 每次读取操作所用的时间(毫秒)。 |
| WTIME | <最小、平均、最大> 每次写入操作所用的时间(毫秒)。 |
| Seqlen | 读取序列的<最小、平均、最大>长度。 |
| #Seq | 读取序列的数目。 序列是连续地读取(换入)的一系列 4K 页面。 读取序列的数目是顺序访问数量的一个指示符。 |
热物理卷报告
| 项 | 描述 |
|---|---|
| 列 | 描述 |
| Name | 物理卷的名称。 |
| Size | 物理卷的大小。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 |
| CAP_ACC | 已访问的容量。 此值是文件中所访问的唯一数据。 缺省单位是 MB。 由 –O 单位选项指定的单位会覆盖缺省单位。 |
| IOP/# | 访问的每个单位数据的 I/O 操作数。 可从 –O 单位选项获取数据的单位。 缺省单位是 MB。 此列的值示例为 2560/T, 256/G, 0.256/M和 0.000/K。 字母 K , M , G 和 T 分别代表 KB , MB , GB 和 TB。 |
| #ROP | 物理卷上发生的总读操作数。 |
| #WOP | 该物理卷上发生的总写操作数。 |
| B/ROP | <最小、平均、最大> 每次读取操作读取的字节数。 |
| B/WOP | <最小、平均、最大> 每次写操作读取的字节数。 |
| RTIME | <最小、平均、最大> 每次读取操作所用的时间(毫秒)。 |
| WTIME | <最小、平均、最大> 每次写入操作所用的时间(毫秒)。 |
| Seqlen | 读取序列的<最小、平均、最大>长度。 |
| #Seq | 读取序列的数目。 序列是连续地读取的一系列 512 字节块。 读取序列的数目是顺序访问数量的一个指示符。 |
基于排序字段,会多次重复所述的每个热报告。
以下是基于不同排序字段的不同热报告:
- 按关键因素排序的热报告
- 按 CAP_ACC 排序的热报告
- 按 IOP/# 排序的热报告
- 按 #ROP 排序的热报告
- 按 #WOP 排序的热报告
- 按 RTIME 排序的热报告
- 按 WTIME 排序的热报告
其中每个报告按对应排序字段的降序顺序排序。
如果您指定 –O hot=r 选项,那么仅生成基于读取操作的报告和基于关键因子的报告,即,生成编号为 1、4 和 6 的报告。
如果用户指定 –O hot=w 选项,那么仅生成基于写入操作的报告和基于关键因子的报告,即,生成编号为 1、5 和 7 的报告。
关键因素由下列栏的值确定:#ROP、B/ROP、Seqlen 和 #Seq。
标志
| 项 | 描述 |
|---|---|
| -i 跟踪文件 | 从指定的 Trace_File
中读取 I/O 跟踪数据,而不是从实时的跟踪进程。 filemon 报告概括了跟踪文件显示的系统和周期的 I/O 活动。 不推荐使用此选项。 请改为使用
-r RootString 标志。 为了报告能精确,跟踪文件必须包括被 filemon 命令所需要的所有 hook。 还必须指定 -n 选项。 |
| -n 文件 | 为脱机跟踪处理指定一个 Gensyms_File。 该文件通过运行带有 -f 选项的 gensyms 命令来创建,并且将输出重定向至一个文件中,如下所示:也必须指定 -i 选项。不推荐使用 -n 标志。 请改为使用 -r RootString 标志。 |
| -o 文件 | 写 I/O 活动报告到指定的 File,而不是到 stdout 文件。 |
| -d | 启动 filemon 命令,但是一直推迟跟踪直到用户运行 trcon 命令。 缺省情况下,跟踪立即启动。 |
| -T n | 将内核的跟踪缓冲区大小设为 n 字节。 缺省大小为每个 CPU 64 000 字节。 可增加缓冲区大小以便容纳更多的突发事件(如果有突发事件)。 (一个典型的事件记录大小是 30 字节。) 注: 内核中的跟踪驱动程序使用双重缓冲,因此实际上分配了两个大小为 n 字节的缓冲区。 而且,注意这些缓冲区是插入到存储器中的,所以它们不受页面调度支配。 大的缓冲区可能会影响页面调度和其他 I/O 的性能。
|
| -P | 锁定内存中的监视进程。 -P 标志导致 filemon 命令的文本和数据页按监视周期的时间插入到存储器中。 使用该标志可以保证当运行一个存储受限环境时,实时的 filemon 过程不会 page out。 |
| -v | 在报告中显示更多信息。 -v 标志最重要的影响是被访问的所有的逻辑文件和所有的段都包括在了 I/O 活动报告中,而不是仅仅有最多 20 个活动文件和段。 |
| -A -x 用户命令 | 启用自动脱机方式。 必须将 -x 标志与 -A 标志配合使用,此情况下会收集跟踪直到指定用户命令执行完毕。 用户命令的典型示例是
sleep 10。 |
| -r RootString | 如果将此标志与 -A 标志组合到一起,那么 filemon 命令会将跟踪数据存储在 RootString.trc 文件中并生成 gensyms 文件,然后将其存储在 RootString.syms 文件中。 如果在没有 -A 标志的情况下启用此选项,那么 filemon 命令会发布 RootString.trc 文件和 RootString.syms 文件的处理以生成脱机报告。 此选项与现有 -n 和 -i 标志相抵触。 filemon 命令继续支持使用 -i 标志和 -n 标志来实现二进制兼容性。 |
| -O 级别 | 只监视指定的文件系统级别。 用逗号分隔的有效选项包括:
|
| 项 | 描述 |
|---|---|
| vm、 lv 和 pv 默认为隐含级别 在全局 WPAR 中运行 档案管理 -O 命令时不使用 -@ 标志。 当以 WPAR 方式或采用 -@ 标志运行 filemon -O
命令时,lf 级别指示为缺省值。 如果未指定 num 参数,那么缺省值为显示该部分的所有条目。 num 参数在 abbreviated 和 collated 格式下不受支持,它仅在统计摘要格式下受支持。 如果指定了 -O detailed 标志,那么报告处于统计摘要格式,并且带有联机方式和脱机方式的详细报告。 filemon 命令的缺省操作方式从摘要和详细统计报告更改为仅摘要统计报告。 如果调用了 filemon 命令并且未使用任何选项,或者仅使用 -O 标识以及 lf、vm、lv、pv、pr、th 或 all 选项的任意组合,那么仅显示摘要报告,除非指定 -O detailed 标志。 |
|
| -U | 报告在 trace 守护程序启动之前打开的文件。 进程标识 (PID) 和文件描述符 (FD) 被文件名所代替。 注: 由于 PID 和 FDs 可复用,因此可以看到使用相同名称字段报告的不同文件。
|
| -w | 以宽幅格式打印热报告。 仅当指定了 –O 热选项时,此选项才有效。 |
| -I 计数: 时间间隔 | 指定要用于多快照跟踪的计数和时间间隔。 如果指定了此选项,那么会通过两张快照之间时间间隔秒数的差距来收集跟踪快照的计数数目。 仅当指定了 –O 热选项时在自动脱机方式下,此选项才有效。 |
| -@ [WparList | 全部] | 报告仅限于参数所传递 WPAR 的列表。 |
示例
- 要监视文件系统的虚拟内存、逻辑卷和物理卷级别的物理 I/O 活动,请输入:
filemon 命令自动启动系统跟踪并且将它放到后台。 在该命令后,输入在此时刻要运行的应用程序和系统命令,然后输入:filemon
发出 trcstop 命令后,将在标准输出上显示 I/O 活动报告 (但可能从屏幕上滚动)。 虚拟内存的 I/O 报告会被限制在可能导致最多 I/O 的 20 个段。trcstop - 监视所有文件系统级别的活动,并将报告写入fmon.out文件,请输入:
filemon 命令自动启动系统跟踪并且将它放到后台。 在该命令后,输入在此时刻要运行的应用程序和系统命令,然后输入:filemon -o fmon.out -O all
发出 trcstop 命令后,会将 I/O 活动报告写入fmon.out file. 监视文件和 I/O 系统的所有四个级别 (逻辑文件,虚拟内存,逻辑卷和物理卷级别)。 逻辑文件和虚拟内存的 I/O 报告限制在导致最多 I/O 的 20 个文件和段(分别地)。trcstop - 监视所有文件系统级别的活动,并将详细报告写入fmon.out文件,请输入:
filemon 命令自动启动系统跟踪并且将它放到后台。 在该命令后,输入在此时刻要运行的应用程序和系统命令,然后输入:filemon -v -o fmon.out -O all
此示例与上一个示例类似,只是在以下示例上生成了详细报告:fmon.out中。 主要的区别在于 filemon 命令将指出它正在启动跟踪的步骤,并且摘要和详细信息的报告将包括所有导致任何的 I/O(可能有很多)的文件和段,而不是只有最多 20 个。trcstop - 要报告先前记录的一个跟踪会话捕获的 I/O 活动,请输入:
在此示例中, filemon 命令从输入文件读取文件系统跟踪事件trcfile. 由于已在文件上捕获跟踪数据,因此 filemon 命令不会将其自身置于后台以使应用程序运行。 读取整个文件后,将在标准输出上显示虚拟内存,逻辑卷和物理卷级别的 I/O 活动报告 (在此示例中,该报告将通过管道传送至pg).filemon -i trcfile | pg - 要只监视逻辑和物理卷的 I/O 活动,同时使用
trcon 和 trcoff 命令控制监视的间隔,请输入:
filemon 命令自动启动系统跟踪并且将它放到后台。 该命令之后,输入要在此时刻运行的不被监视的应用程序和系统命令,请输入:filemon -d -o fmon.out -O pv,lv
在该命令后,输入要在此时刻运行的被监视的应用程序和系统命令,请输入:trcon
该命令之后,输入要在此时刻运行的不被监视的应用程序和系统命令,请输入:trcoff
在该命令后,输入要在此时刻运行的被监视的应用程序和系统命令,请输入:trcon
在本示例中,-O 标志只被用来限制监视逻辑和物理卷。 只有那些与逻辑和物理卷相关的跟踪事件才被启用。 而且,作为使用 -d 标志的一个结果,监视最初是被延缓一直到执行了 trcon 命令。 通过使用 trcoff 和 trcon 命令,系统跟踪可以被间断地禁用和重启用,这样就能只监视特殊的间隔。trcstop - 为了在脱机方式下运行 filemon,分别运行 trace 和 gensyms 命令,然后将这些命令的输出作为 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
创建 gensyms 文件:trcstop
然后运行 filemon 附带着 -i 和 -n 标志:gensyms -F > gensyms.outfilemon -i trace.out -n gensyms.out -O all - 要在自动脱机方式下生成热报告(数据单位为兆字节),请使用以下命令:
filemon -O hot,unit=MB -r <rootstring> -A-x "<user command>" - 要以 5 秒的时间间隔生成具有 3 张跟踪快照的热报告,请运行以下命令:
filemon -O hot -r <rootstring> -A-x "<user command>" -I 3:5 - 要在脱机方式下生成热报告,请输入以下命令:
filemon -r <rootstring> -O hot