全部博文(323)
分类: 系统运维
2008-03-06 17:16:53
filemon 命令跟踪设备来获取一段时间间隔内的 I/O 活动的详细图像,该时间间隔产生于文件系统应用的不同层面,包括本地文件系统、虚拟内存段、LVM 和物理磁盘层。数据可以在所有层或所有通过 -O 选项指定的层面上被收集。缺省值是在 VM、LVM 和物理层面上收集。总结和详细报告一起生成。既然它使用了跟踪设备,那么 filemon 命令就可以只被 root 用户或一位系统组的成员运行。
为了确认 filemon 命令是否已安装并且可用,您可以运行如下命令:
# lslpp -lI perfagent.tools
跟踪可以由 filemon 命令启动,您也可以通过 trcoff 子命令随意地暂挂,并可通过 trcon 子命令来恢复执行以及使用 trcstop 子命令来终止运行。(既然 filemon 命令正在以优先级 40 的情况下运行,您可能想执行如下命令 nice -n -20 trcstop 来停止 filemon 命令。一旦跟踪被终止,filemon 命令便把报告写入标准输出。
注:
只有属于那些在 filemon 命令启动之后打开的文件的数据才会被收集。除非您指定 -u 标志。
filemon 命令可以从一个指定的文件中读取 I/O 跟踪的数据,而不是从实时跟踪进程中读取。在这种情况下,filemon 报告总结了系统的 I/O 活动情况和由跟踪文件表示的周期。当有必要事后处理远程机器上的跟踪文件或先执行跟踪数据收集后在另一时间事后处理时,这个脱机处理方法十分有用。
trcrpt -r 命令在跟踪日志文件上执行,并且重定位到另一个文件,如下所示:
# gennames > gennames.out
# trcrpt -r trace.out > trace.rpt
在这点上,调整过的跟踪日志文件伺服于 filemon 命令以便报告被先前跟踪会话捕捉到的 I/O 活动,如下所示:
# filemon -i trace.rpt -n gennames.out | pg
在这个示例中,filemon 命令从输入文件 trace.rpt 中读取文件系统跟踪事件。因为跟踪数据已经捕捉到文件中,filemon 命令并不把它放到后台以便让应用程序运行。整个文件被读取之后,有关虚拟内存、逻辑卷和物理卷级别的 I/O 活动报告将会在标准输出中显示。(在这个示例中,报告被输送到 pg 命令中)。
如果 trace 命令以带有 -C all 标志方式运行,那么同样以带有 -C all 标志方式运行 trcrpt 命令
下列命令的序列给出了一个有关 filemon 命令使用的示例:
# filemon -o fm.out -O all; cp /smit.log /dev/null ; trcstop
这份报告是按此序列生成的(在另一类空闲系统),如下所示:
Thu Aug 19 11:30:49 1999
System: AIX texmex Node: 4 Machine: 000691854C00
0.369 secs in measured interval
Cpu utilization: 9.0%
Most Active Files
------------------------------------------------------------------------
#MBs #opns #rds #wrs file volume:inode
------------------------------------------------------------------------
0.1 1 14 0 smit.log /dev/hd4:858
0.0 1 0 13 null
0.0 2 4 0 ksh.cat /dev/hd2:16872
0.0 1 2 0 cmdtrace.cat /dev/hd2:16739
Most Active Segments
------------------------------------------------------------------------
#MBs #rpgs #wpgs segid segtype volume:inode
------------------------------------------------------------------------
0.1 13 0 5e93 ???
0.0 2 0 22ed ???
0.0 1 0 5c77 persistent
Most Active Logical Volumes
------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------
0.06 112 0 151.9 /dev/hd4 /
0.04 16 0 21.7 /dev/hd2 /usr
Most Active Physical Volumes
------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------
0.10 128 0 173.6 /dev/hdisk0 N/A
------------------------------------------------------------------------
Detailed File Stats
------------------------------------------------------------------------
FILE: /smit.log volume: /dev/hd4 (/) inode: 858
opens: 1
total bytes xfrd: 57344
reads: 14 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 1.709 min 0.002 max 19.996 sdev 5.092
FILE: /dev/null
opens: 1
total bytes xfrd: 50600
writes: 13 (0 errs)
write sizes (bytes): avg 3892.3 min 1448 max 4096 sdev 705.6
write times (msec): avg 0.007 min 0.003 max 0.022 sdev 0.006
FILE: /usr/lib/nls/msg/en_US/ksh.cat volume: /dev/hd2 (/usr) inode: 16872
opens: 2
total bytes xfrd: 16384
reads: 4 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.042 min 0.015 max 0.070 sdev 0.025
lseeks: 10
FILE: /usr/lib/nls/msg/en_US/cmdtrace.cat volume: /dev/hd2 (/usr) inode: 16739
opens: 1
total bytes xfrd: 8192
reads: 2 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.062 min 0.049 max 0.075 sdev 0.013
lseeks: 8
------------------------------------------------------------------------
Detailed VM Segment Stats (4096 byte pages)
------------------------------------------------------------------------
SEGMENT: 5e93 segtype: ???
segment flags:
segment flags:
reads: 13 (0 errs)
read times (msec): avg 1.979 min 0.957 max 5.970 sdev 1.310
read sequences: 1
read seq. lengths: avg 13.0 min 13 max 13 sdev 0.0
SEGMENT: 22ed segtype: ???
segment flags: inode
reads: 2 (0 errs)
read times (msec): avg 8.102 min 7.786 max 8.418 sdev 0.316
read sequences: 2
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0
SEGMENT: 5c77 segtype: persistent
segment flags: pers defer
reads: 1 (0 errs)
read times (msec): avg 13.810 min 13.810 max 13.810 sdev 0.000
read sequences: 1
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0
------------------------------------------------------------------------
Detailed Logical Volume Stats (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hd4 description: /
reads: 5 (0 errs)
read sizes (blks): avg 22.4 min 8 max 40 sdev 12.8
read times (msec): avg 4.847 min 0.938 max 13.792 sdev 4.819
read sequences: 3
read seq. lengths: avg 37.3 min 8 max 64 sdev 22.9
seeks: 3 (60.0%)
seek dist (blks): init 6344,
avg 40.0 min 8 max 72 sdev 32.0
time to next req(msec): avg 70.473 min 0.224 max 331.020 sdev 130.364
throughput: 151.9 KB/sec
utilization: 0.06
VOLUME: /dev/hd2 description: /usr
reads: 2 (0 errs)
read sizes (blks): avg 8.0 min 8 max 8 sdev 0.0
read times (msec): avg 8.078 min 7.769 max 8.387 sdev 0.309
read sequences: 2
read seq. lengths: avg 8.0 min 8 max 8 sdev 0.0
seeks: 2 (100.0%)
seek dist (blks): init 608672,
avg 16.0 min 16 max 16 sdev 0.0
time to next req(msec): avg 162.160 min 8.497 max 315.823 sdev 153.663
throughput: 21.7 KB/sec
utilization: 0.04
------------------------------------------------------------------------
Detailed Physical Volume Stats (512 byte blocks)
------------------------------------------------------------------------
VOLUME: /dev/hdisk0 description: N/A
reads: 7 (0 errs)
read sizes (blks): avg 18.3 min 8 max 40 sdev 12.6
read times (msec): avg 5.723 min 0.905 max 20.448 sdev 6.567
read sequences: 5
read seq. lengths: avg 25.6 min 8 max 64 sdev 22.9
seeks: 5 (71.4%)
seek dist (blks): init 4233888,
avg 171086.0 min 8 max 684248 sdev 296274.2
seek dist (%tot blks):init 48.03665,
avg 1.94110 min 0.00009 max 7.76331 sdev 3.36145
time to next req(msec): avg 50.340 min 0.226 max 315.865 sdev 108.483
throughput: 173.6 KB/sec
utilization: 0.10
在系统伴有真实负载的情况下使用 filemon 命令将产生更长的报告并可能需要更多的跟踪缓存空间。filemon 命令的空间和 CPU 时间消耗可能在一定范围内降低系统性能。在生产环境下开始使用之前,先用 filemon 命令在非生产系统中试验。同样,在脱机处理和系统具有许多 CPU 的情况下使用带有 -C all 标志的 trace 命令。
注:
尽管 filemon 命令以详细的统计信息报告了平均数、最小值、最大值和标准偏差,但是该结果并不能用来形成可信间隔数或其他正式的统计推理。总的来说,数据点的分布既不随机也不对称。
filemon 命令的全局报告
全局报告列出了在测量间隔中最活跃的文件、段、逻辑卷和物理卷。它们在 filemon 报告的开始部分显示。缺省情况下,逻辑文件和虚拟内存报告各自被限制在最多 20 个最活跃的文件和段,衡量标准为总的数据传送量。如果 -v 标志被指定了,那么所有文件和段的活动将被报告。报告中的所有信息按照最活跃到最不活跃依次从上到下列出。
最活跃的文件
#MBs
此文件在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。
#opns
在测量周期内的文件的打开次数。
#rds
文件读取调用的次数
#wrs
文件写入调用的次数
file
文件名称(文件路径全称在详细报告中)。
volume:inode
文件驻留的逻辑卷和在相连文件系统总的 i-node 数目。此字段可以被用来把文件和在详细的 VM 段报告中显示的其相应的持久段关联起来。此字段对在执行过程中创建和删除的临时文件可以为空。
最活跃的文件是在逻辑卷 hd4 和文件 null 的 smit.log。应用程序使用 terminfo 数据库来管理屏幕;所以 ksh.cat 和 cmdtrace.cat 同样繁忙。任何情况下,shell 需要向屏幕传送一条信息时,它就使用数据源目录。
为了识别未知文件,您可以把逻辑卷的名称 /dev/hd1 转换成文件系统安装点名称 /home,并且使用 find 或 ncheck命令:
# find / -inum 858 -print
/smit.log
或者
# ncheck -i 858 //:858 /smit.log/:
# ncheck -i 858 //:858 /smit.log
最活跃的段
#MBs
此段在测量间隔时间内的传送量(以 MBs 为单位)。各行按照此字段降序排列。
#rpgs
从磁盘读入段中大小为 4-KB 的页面数
#wpgs
从段中写入磁盘大小为 4-KB 的页面数(page out)
#segid
内存段的 VMM 标识
segtype
段的类型:工作段、持久段(本地文件)、客户机段(远程文件)、页表段、系统段或者包含文件系统数据的指定持久段(日志、根目录、.inode、.inodemap、.inodex、.inodexmap、.indirect、.diskmap)。
volume:inode
对持久段来说,包含相关文件的逻辑卷名称和文件的 i-node 数目。此字段可以被用来把段和在详细的文件状态报告中显示的其相应的文件关联起来。对非持久段来说,此字段为空。
如果命令仍是活动的,虚拟内存分析工具 svmon 可以被用来显示有关段的更多的信息。给出它的段标识(segid),如下所示: svmon -D segid。
在我们的示例中,这个 segtype ??? 意味着系统不能识别该段类型,并且您必须使用 svmon 命令来获取更多的信息。
最活跃的逻辑卷
util
逻辑卷使用率。
#rblk
从逻辑卷读取的大小为 512-byte 的块数。
#wblk
写入逻辑卷大小为 512-byte 的块数。
KB/s
每秒钟平均传送速率,单位 KB。
volume
逻辑卷名称。
description
文件系统安装点或是逻辑卷类型(paging, jfslog, boot, or sysdump)。例如,逻辑卷 /dev/hd2 是 /usr类型;/dev/hd6 是 paging 类型以及 /dev/hd8 是 jfslog 类型。有时也可能出现被压缩的这个字眼。这意味着所有的数据在被写入磁盘前都会以 Lempel-Zev (LZ)压缩技术自动压缩,在从磁盘读取时则自动解压缩。
使用率用百分比表示,0.06 是指 6% 的逻辑卷在测量时间间隔内繁忙。
最活跃的物理卷
util
物理卷使用率。
注:
逻辑卷 I/O 请求在物理卷 I/O 请求前后启动。总的逻辑卷使用率将会看起来比总的物理卷使用率高。
#rblk
从物理卷读取的大小为 512-byte 的块数。
#wblk
写入物理卷大小为 512-byte 的块数。
KB/s
每秒钟平均传送速率,单位 KB。
volume
物理卷名称。
description
有关物理卷类型的简单描述,例如, SCSI 多媒体 CD-ROM 驱动器 或 16位 SCSI 磁盘驱动器。
使用率用百分比表示,0.10 是指 10% 的物理卷在测量时间间隔内繁忙。
filemon 命令的详细报告
详细的报告给出了相对全局报告的一些附加信息。对每个报告文件、段或卷来说,在详细报告中都有一个条目。每个条目中字段在下面的四个详细报告中描述。有些字段报告了一个单值;其余的报告了被称为。例如,响应时间的统计信息保存了所有被监视的读写请求。除了报告响应次数的标准偏差外,平均、最小和最大的响应次数也被报告。标准差是用来显示单个响应次数相对平均响应次数而言偏差了多少。大约 2/3 的样本响应次数在平均数减去标准差(avg - sdev)和 平均数加上标准差(avg + sdev)之间。如果响应次数的分布在很大的范围内散射,那么标准差相对平均响应时间而言就会变大。
详细的文件统计信息
在最活跃的文件报告中列出了为每个文件的提供的详细文件统计信息。这些节可以被用来确定该文件的存取情况。除了确定总的传送字节数、opens、writes 和 lseeks,用户也可以确定读取/写入的大小和次数。
FILE
文件的名称。如有可能,路径全称将被给出。
volume
逻辑卷/文件系统包括文件的名称。
inode
在文件系统中文件的 I-node 数目。
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)
写入相应时间的统计信息。
lseeks
lseek()子例程的调用的数目。
read sizes 和 write sizes 将会给您一个有关您的应用程序在读取和写入信息的性能的感性认识。使用 4KB 大小的多重文件为最佳结果。
详细的 VM 段统计信息
每个列在 最活跃段的报告中的元素有相关的一节显示了有关真实的 I/O 进出内存的详细信息。
SEGMENT
内部操作系统的段标识。
segtype
段内容的类型
segment flags
不同的段属性。
volume
对持久段来说,包含相关文件的逻辑卷名称。
inode
对持久段来说,相应文件的 i-node 数目。
reads
读取到段中大小为 4096 字节的页面数(就是,paged in)。
read times (msec)
读取响应时间统计信息(avg/min/max/sdev),单位为毫秒。
read sequences
读取的序列数。一个序列是一连串连续读取的字符串页面。read sequences 的数目是顺序存取量的指示符。
read seq. lengths
描述了 read sequences 的长度的统计信息,以页位单位。
writes
从段写入磁盘的页面数(就是,paged out)。
write times (msec)
写入相应时间的统计信息。
write sequences
写入的序列数。一个序列是一连串连续写入(paged out)的页面。
write seq. lengths
描述了写序列的长度的统计信息,以页位单位。
通过检查 reads 和 read-sequence 计数情况,您可以确定访问是顺序的还是随机的。例如,如果 read-sequence 计数接近 reads 计数,该文件访问更趋于随机化。另一方面,如果 read-sequence 计数在很大程度上比 read 计数小很多并且 read-sequence 长度是一个高值,该文件根趋于顺序化。这个逻辑同样适用于 writes 和 write sequence。
详细的逻辑/物理卷统计信息
每个列在最活跃逻辑卷/最活跃物理卷的报告中元素有相应的一节显示了有关逻辑/物理卷的详细信息。除了读取和写入的数量。用户还可以不仅确定逻辑/物理卷的初始和平均的搜索距离,而且确定读取和写入的次数和大小。
VOLUME
卷名。
description
有关卷的描述。(如果对象是逻辑卷则描述内容,物理卷则描述类型。)
reads
对卷进行读取请求的次数
read sizes (blks)
读取传送大小统计信息(avg/min/max/sdev),以 512 字节大小的块为单位。
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
每秒总的卷吞吐量,单位为 KB。
utilization
卷繁忙的时间比重。在此报告中的各条目按照此字段降序排列。
一个长的寻道时间可以增加 I/O 响应时间,结果降低了应用程序的性能。通过检查读取请求数和写入请求数的计数情况,您可以确定访问是顺序的还是随机的。这个逻辑同样适用于写请求数和写序列。
/etc/inittab 文件总是很活跃。指定在 /etc/inittab 中的守护程序经常被检查以确定它们是否要被重新生成。
/etc/passwd 文件也很活跃。因为许多文件和目录的存取许可性要被核实。
一个长的寻道时间增加了 I/O 的响应时间并且降低了系统的性能。
如果大部分读写请求要求寻道,您可能在同一个物理磁盘上拥有碎片文件和过分活跃的文件系统。然而,对联机事务处理或是数据库系统来说,这种行为可能是正常的。
如果读写请求的数目接近序列数,物理磁盘存取方式较顺序而言更加随机化。一个序列是一连串连续读取(paged in)或连续写入(paged out)的页面。seq. lengths 是序列以页为单位的长度。一个随机文件存取也有可能涉及许多寻道数。在这种情况下,您不能区分 filemon 命令的输出结果是表明文件的存取方式为随机还是文件是碎裂的。使用 fileplace 命令来进一步调查。
远程文件列在 volume:inode 列中,并带有远系统的名称。