跟踪守护程序
用途
记录选定的系统事件。
语法
trace [ -a [ -g ]] [ -f | -l ] [ -c] [ -C [ CPUList | all ]] [ -d ] [ -e string-cmd ] [ -h ] [ -j EventList ] [ -k EventgroupList ] [ -J EventgroupList ] [ -K EventgroupList ] [ -m Message ] [ -M ] [ -N ] [ -n ] [ -o Name ] [ -o- ] [ -p ] [ -r reglist ] [ -s ] [ -A ProcessIDList ] [ -t ThreadIDList ] [ -x 程序规范 | -X 程序规范 ] [ -I ] [ -P 跟踪-传播 ] [ -L Size ] [ -T Size ] [ -W ] [ -@ WparList ]
描述
跟踪守护程序配置一个跟踪会话,并启动系统事件的收集。 跟踪功能所收集的数据记录在跟踪日志中。 跟踪日志的报告可以用 trcrpt 命令生成。
当使用 -a, -x或 -X 标志调用时, 跟踪守护程序以异步方式运行 (例如,作为后台任务)。 否则,它将以交互方式运行,并提示您输入 子命令。
要将 WPAR配置的标识 (CID) 放在跟踪挂钩中,请使用 -W 标志。
要跟踪特定 WPAR,请将 -@ 标志与要跟踪的 WPAR 名称列表配合使用。
可以使用系统管理界面工具 (SMIT) 来运行 跟踪守护程序。 要使用 SMIT,请输入:
smit trace跟踪数据收集的方式如下:
| 项 | 描述 |
|---|---|
| 备用 (缺省值) | 所有的跟踪事件都在跟踪日志文件中捕获。 |
| 循环 ( -l) | 跟踪事件包括在内存缓冲区中,不在跟踪日志文件中捕获,直到跟踪数据收集工作停止为止。 |
| 单个 ( -f) | 当内存跟踪缓冲区已满,且缓冲区中的内容已捕获在跟踪日志文件中时,跟踪事件的收集工作就结束。 |
| 缓冲区分配 | 跟踪缓冲区可以从内核堆分配,或放入独立的段中。 缺省情况下,除非请求的缓冲区大小很大以致不能装入内核堆(这种情况下,那么在独立的段中分配缓冲区),否则缓冲区一律都从内核堆中分配。 从独立的段分配缓冲区,多少有点妨碍跟踪性能。 但是,独立段中的缓冲区不会占用调页空间,只占一点锁定内存。 |
您可以选择仅跟踪选定的进程或线程。 还可以跟踪单个程序。 可以指定是否要传播跟踪,或者将跟踪扩展到新建的进程或线程。 当通道 0 处于活动状态时,您可以选择在此类跟踪中包含中断事件。
- 除非在启动被跟踪进程之前就启动了跟踪,否则将不会捕获进程启动事件。 如果在启动被跟踪的进程之前就启动了跟踪,那么还将捕获来自被跟踪进程之外的其他进程的一些事件。
- 当跟踪使用内核堆中的内存时,此内存将保留内核内存的一部分,直到下次重新引导系统为止。 因此,在使用大缓冲区时,应该十分当心。
标志
| 项 | 描述 |
|---|---|
| -@ WparList | 跟踪您在 WparList 参数中指定的 工作负载分区 。 多个 WPAR 名称可以用逗号分隔,也可以用引号括起并以空格分隔。 要在跟踪中包含当前的全局系统,指定 Global。 只能在 工作负载分区 环境中的全局系统中指定 -@ 标志。 |
| -a | 异步运行跟踪守护程序(即作为一个后台任务)。 一旦以此种方式启动跟踪,那么可以使用 trcon、trcoff 和 trcstop 命令来分别启动跟踪、停止跟踪或退出跟踪会话。 这些命令可以作为链接到跟踪的链路来实现。 |
| -A ProcessIDList | 只跟踪进程及其由(可选)ProcessIDList 指定的子进程。 进程标识是十进制数字。 多进程标识可以用逗号分隔或引号引起来并用空格分隔。 -A 标志仅对跟踪通道 0 有效;-A 和 -g 标志不兼容。启动跟踪时指定进程的现有的所有线程受到跟踪。 在缺省情况下,如果在启动跟踪后,受到跟踪的进程将创建其他线程或进程,除非指定 -P 标志,否则将不跟踪它们。 |
| -c | 保存跟踪日志文件,添加 .old 到其文件名。 |
| -C [ CPUList | 全部 ] | 使用 CPUList 中的每个处理器的一组缓冲区跟踪。 处理器可以用逗号分隔或用双引号引起来并以逗号或空格分隔。 要跟踪所有处理器,指定 all。 因为该标志使用每个处理器的一组缓冲区,并为每个处理器生成一个文件,所以它可能消耗大量内存和文件空间,要慎重使用。 生成的文件名为 trcfile, trcfile-0, trcfile-1等。 其中 0, 1等是处理器编号。 如果指定了 -T 或 -L,那么大小适用于每一个缓冲区集合和每一个文件。 在单处理器系统上,可以指定-C all但是-C将忽略处理器号列表。 注意只有 root 用户才能使用-C标志。
|
| -d | 禁用自动启动跟踪数据收集。 延时启动跟踪数据收集。 正常情况下,在启动跟踪守护程序时就会自动启动跟踪数据收集。 使用 trcon 命令来启动跟踪数据收集。 |
| -e string-cmd | 通过在启动跟踪之前使用 string-cmd 作为自变量运行 ctctrl 来配置组件跟踪。 换言之,它将运行 ctctrl string-cmd。 允许传递多个 -e 选项,这相当于连续运行带有自变量的每个 string-cmd 的 ctctrl 命令。 在启动跟踪系统前,(通过将系统跟踪方式设置为 On、更改跟踪级别等)该选项可以用于对某些组件配置系统跟踪方式。 |
| -f | 以单一方式运行跟踪。 当内存缓冲区已满时,立即停止跟踪数据收集。 然后将跟踪数据写入跟踪日志。 使用 trcon 命令来重新启动跟踪数据收集,并捕获另一个已满的数据缓冲区。 如果在缓冲区满之前发出 trcoff 子命令,就停止跟踪数据收集并将缓冲区当前内容写入跟踪日志。 |
| -g | 在一般跟踪通道(通道 1 至 7)中启动跟踪会话。 该标志仅当跟踪异步运行(-a)时才有效。 命令的返回码就是通道编号;通道编号随后必须用于一般跟踪子例程调用。 要停止通用跟踪会话,请使用命令 trcstop -<channel_number>。 |
| -h | 省略跟踪日志的头记录。 通常,跟踪守护程序在跟踪日志开始部位以日期和时间(通过 date 命令)来写头记录;系统名称、版本和发行版、节点标识、机器标识(通过 uname -a 命令)以及用户定义的消息。 在跟踪日志开始部位,头记录的信息包括在 trcrpt 命令的输出中。 |
| -I | 跟踪中断事件。 当用 -A 或 -t 指定时,-I 标志除了包括指定的进程或线程的事件之外,还包括中断事件。 如果指定了 -I,但是既没有指定 -A 也没有指定 -t,那么仅跟踪中断级别事件。 -I 标志仅对跟踪通道 0 有效;-I 和 -g 标志不兼容。 |
| -j EventList | 指定用户定义事件以收集跟踪数据。 在 EventList 参数中指定的列表项可以用逗号分隔,或用引号引起来并用逗号或空格分隔。 在AIX® 6.1及更早的版本中,以hh形式指定两位数挂钩 ID 可指定hh00、hh10,...,hhF0。 如果以 hhh 格式指定三位数挂钩标识,那么将指定 hhh0。 如果以 hhhh 格式指定四位数挂钩标识,那么将指定 hhhh。 如果这些事件中有任一事件丢失,那么 trcrpt 命令所报告的信息就不完整。 因此,使用 -j 标志时,包括 EventList 中的所有事件。 如果用 SMIT 或 -J 标志启动跟踪,那么这些事件在 tidhk 组中。 |
| -J EventgroupList | 指定要包含的事件组。 在 EventgroupList 参数中指定的列表项可以用逗号分隔,或用引号引起来并用逗号或空格分隔。 -J 和 -K 标志与 -j 和 -k 的作用一样,除了对于事件组而不是单个挂钩标识。 您可以在命令内部指定每个标志 -j、-J、 -k 和 -K。 |
| -k EventgroupList | 指定用户定义的事件以排除跟踪数据。 在 EventgroupList 参数中指定的列表项可以用逗号分隔,或用引号引起来并用逗号或空格分隔。 在 AIX 6.1 和更低发行版中,指定格式为 hh 的两位数挂钩标识将指定 hh00, hh10,...,hhF0。 如果以 hhh 格式指定三位数挂钩标识,那么将指定 hhh0。 如果以 hhhh 格式指定四位数挂钩标识,那么将指定 hhhh。 提示: 以下事件用于确定 trcrpt 报告中的 pid, cpuid和 exec 路径名:
如果这些事件中有任一事件丢失,那么 trcrpt 命令所报告的信息就不完整。 使用 -k 标志时,不要在 EventgroupList 参数中包含这些事件。 如果用 SMIT 或 -J 标志启动跟踪,那么这些事件在 tidhk 组中。 |
| -K EventgroupList | 指定要排除的事件组。 在 EventgroupList 参数中指定的列表项可以用逗号分隔,或用引号引起来并用逗号或空格分隔。 -J 和 -K 标志与 -j 和 -k 的作用一样,除了对于事件组而不是单个挂钩标识。 您可以在命令内部指定每个标志 -j、-J、 -k 和 -K。 |
| -l | 以循环方式运行跟踪。 在停止跟踪数据收集时,跟踪守护程序将跟踪数据写入跟踪日志中。 仅捕获跟踪数据的最后一个缓冲区。 使用 trcoff 命令来停止跟踪数据收集时,应该使用 trcon 命令来重新启动它。 |
| -L 大小 | 用规定值重设缺省跟踪日志文件大小(1 MB)。 如果将文件大小指定为 0,那么会将跟踪日志文件大小设置为缺省大小。注:在循环方式和备用方式中,跟踪日志文件大小必须至少是跟踪缓冲区大小的两倍。 在单一方式中,跟踪日志文件必须至少是缓冲区的大小。 有关控制跟踪缓冲区大小的信息,请参阅 -T 标志。 |
| -m 消息 | 指定将要包括在跟踪日志的消息字段头记录中的文本。 |
| -M | 将运行进程的地址映射转储到跟踪。 如果要由 tprof 命令处理跟踪文件,那么必须指定 -M 标志。 |
| -n | 将这些信息添加到跟踪日志头:锁定信息、硬件信息以及对于每一个装入程序项的符号名称、地址和类型。 |
| -N | 将指定进程的地址映射转储到跟踪。 -N 选项与 -M 选项配合使用。 |
| -o 名称 | 重设 /var/adm/ras/trcfile 缺省跟踪日志文件并将跟踪数据写入用户定义的文件。 |
| -o- | 重设缺省跟踪日志名称,并将跟踪数据写到标准输出。 使用此标志时,将忽略 -c 标志。 如果指定 -o- 和 -C,那么会产生一个错误。 |
| -p | 每一个 hook 都包含当前处理器的 cpuid。 该标志仅对 64 位内核跟踪有效。注:trcrpt 命令可以向 cpuid 报告是否指定了此选项。 |
| -P 传播 | 用字母 p 指定传播以用于跨进程创建的传播、字母 t 用于跨线程创建的传播,而字母 n 用于无传播。 跨进程创建的传播意味着跨线程创建的传播。 例如,如果指定 -A 来跟踪进程,启动跟踪时此进程的存在的所有线程将受到跟踪。 -Pt 标志导致此进程随后创建的所有线程也将受到跟踪。 如果指定了 -Pp,将跟踪此进程随后创建的所有进程和线程。 如果指定 -t all 来跟踪所有线程,那么忽略 -P。 -P 标志仅对跟踪通道 0 有效;-P 和 -g 标志不兼容。 |
| -r 重新列表 | 可选,并且仅对在 64 位内核上运行的 trace 有效。 reglist 项目用逗号分隔,或者加上引号并用空格分隔。 最多可指定 8 个寄存器。 有效 reglist 值为:
指定 -r 标志时, trace 命令会将指定的寄存器值转储到头中。 限制: 并非所有寄存器都对所有处理器有效。
|
| -s | 当填写跟踪日志时,停止跟踪。 当跟踪日志填满后,通常跟踪守护程序都回绕跟踪日志,并继续收集跟踪数据。 在异步操作过程中,该标志可以使跟踪守护程序停止跟踪数据收集。 (在交互式操作中,必须用 quit 子命令来停止跟踪。) |
| -t ThreadIDList | 仅跟踪使用 ThreadIDList 参数指定的线程。 线程标识是十进制数字。 多个线程标识可以用逗号分隔或引号引起来并用空格分隔。 另外,线程列表可以为 -t 标志仅对跟踪通道 |
| -T 大小 | 用规定的值覆盖跟踪缓冲区大小缺省值 128 KB。 您必须为 root 用户来请求大于 1 MB 的缓冲区空间。 最大可能的大小为 268435184 字节,除非使用 -f 标志(此时大小为 536870368 字节)。 最小可能的大小为 8192 字节,除非使用 -f 标志(此时大小为 16392 字节)。 当使用 -f 标志时,8192 和 16392 之间的大小都可使用;但是实际使用的大小为 16392 字节。 注:在循环方式和备用方式中,跟踪缓冲区的大小必须是跟踪日志文件大小的一半,或小于跟踪日志文件大小。 在单一方式中,跟踪日志文件必须至少是缓冲区的大小。 有关控制跟踪日志文件大小的信息,请参阅 -L 标志。 另外也请注意,跟踪缓冲区使用锁定内存,这意味着它们不可页面调度。 因此,跟踪缓冲区越大,就有越少的物理内存适用于应用程序。 -f 标志实际上使用了两个缓冲区,它们一起作为单个缓冲区来运行(除了当第一个缓冲区满时,将记录一个缓冲区回绕跟踪 hook 这种情况以外)。 |
| -W | 使用 -W 标志将当前进程的 工作负载分区配置标识 (CID) 包含在每个挂钩中。 此标志仅在 工作负载分区 环境中的全局系统中有效。 提示: 无论是否指定此选项, trcrpt 命令都可以报告 工作负载分区CID。
|
| -x program-specification | 跟踪指定的程序。 除非如果还给定程序名称以外的内容,而必须给程序规范加引号,否则 program-specification 将指定程序和参数作为从 shell 运行程序时的程序和参数。 当程序退出并返回程序的返回码时,跟踪将自动停止。 在缺省情况下,还跟踪此程序创建的任何进程和线程;如同指定了 -Pp。 要更改此行为,使用 -Pn 来指定不使用跟踪传播,或者使用 -Pt 将跟踪只传播到程序的原始进程创建的线程。 提示: -x 标志意味着异步跟踪,就像还指定了 -a 标志一样。
|
| -x program-specification | 除了在程序退出时跟踪不自动停止以外,-X 标志与 -x 标志的作用相同。 跟踪派生进程然后终止的程序时,它很有用,您希望也跟踪这些新进程。 |
子命令
当以交互方式运行时,跟踪会识别以下一些子命令:
| 项 | 描述 |
|---|---|
| trcon | 启动跟踪数据收集。 |
| trcoff | 停止跟踪数据收集。 |
| q 或 quit [-serial | -dd ] | 停止跟踪数据收集并退出跟踪。 如果指定了 -s 选项,那么这将序列化任何暂挂的 I/O 操作。 如果指定了 -d 选项,那么将废弃任何暂挂的 I/O 操作。 |
| ! 命令 | 运行由 Command 参数指定的 shell 命令。 |
| ? | 显示 trace 子命令摘要。 |
信号
INTERRUPT 信号充当启动和停止跟踪数据收集的开关。 中断被设置为 SIG_IGN 用于被跟踪的进程。
安全性
| 项 | 描述 |
|---|---|
| aix.ras.trace.tracech0 | 需要在通道 0 上运行 trace 命令。 |
| 项 | 描述 |
|---|---|
| aix.ras.trace.trace | 需要执行所有跟踪操作。 |
示例
- 要以交互方式使用跟踪,请输入trace, (>显示提示) ,然后指定所需的 子命令 。 例如,要在运行 anycmd 命令期间跟踪系统事件,请输入:
trace > !anycmd > q - 为避免命令完成时出现延迟,请仅使用一个命令行以异步方式启动跟踪 ( -a) ,请输入:
trace -a; anycmd; trcstop - 要跟踪系统本身 10 秒左右,请输入:
trace -a; sleep 10; trcstop - 要输出跟踪数据到特定的跟踪日志文件(而不是 /var/adm/ras/trcfile 缺省跟踪日志文件),请输入:
trace -a -o /tmp/my_trace_log; anycmd; trcstop - 要捕获 cp 命令的执行,从收集进程排除特殊事件,请输入:
trace -a -k "20e,20f" -x "cp /bin/track /tmp/junk"在上例中,-k 选项抑制从 lockl 和 unlockl 函数收集事件(20e 和 20f 事件)。
还要注意使用了 -x 标志,因此将只跟踪与 cp 命令进程相关的 hook,并且将不跟踪中断活动。
- 要跟踪 hook 234 以及能使用户可以看到进程名称的 hook,请使用:这可以跟踪事件组“tidhk”中的 hook 和 hook 234。
trace -a -j 234 -J tidhk - 要使跟踪使用每个处理器的一组缓冲区,请指定:
trace -aC all生成的文件为 /var/adm/ras/trcfile 、/var/adm/ras/trcfile-0、/var/adm/ras/trcfile-1 等直到 /var/adm/ras/trcfile-( n-1),其中 n 为系统中的处理器号。提示: trace -aCall -o mylog生成文件 mylog , mylog-0, mylog-1, ... - 要跟踪启动守护进程的程序,并在原始程序完成之后继续跟踪守护程序,那么使用
必须用 trcstop 停止跟踪。trace -X "mydaemon" - 要跟踪当前正在运行的 mydaemon,请使用:
其中 mydaemon-process-id 是 ps 命令返回的 mydaemon 的进程。 -Pp 标志在跟踪运行时指示跟踪还要跟踪 mydaemon 创建的任何进程和线程。trace -A mydaemon-process-id -Pp - 要捕获 PURR 和 PMC1 和 PMC2,请输入:
trace -ar "PURR PMC1 PMC2" - 要跟踪挂钩 1A00、1A10,...,1AF0、DCA0 和 1AB1,请输入:
trace -aj 1A,DCA,1AB1
文件
| 项 | 描述 |
|---|---|
| /usr/include/sys/trcmacros.h | 定义 trchook 和 utrchook 宏。 |
| /var/adm/ras/trcfile | 包括缺省跟踪日志文件。 |