报告 CPU 使用情况。
tprof [ -c ] [ -C { all | CPUList } ] [ -d ] -D ] [ -e ] [ -F ] [ -j ] [ -k ] [ -l ] [ -m ObjectsList ] [ -M SourcePathList ] [ -p ProcessList ] [ -P { all | PIDsList } ] [ -s ] [ -S SearchPathList ] [ -t ] [ -T BufferSize ] [ -u ] [ -v ] [ -V VerboseFileName ] [ -z ] { { -r RootString } | { [ -A { all | CPUList }] [ -r RootString ] -x Program } }
tprof 命令报告单个程序和整个系统的 CPU 使用情况。对任何使用可能是 CPU 受限的 JAVA、C、C++ 或 FORTRAN 程序的人,和想了解程序的哪些部分大量占用 CPU 的人,该命令是一个有用的工具。
tprof 命令负责分配对象代码、进程、线程、子例程(用户方式、内核方式以及共享库),甚至是程序的源代码行或单个指令使用 CPU 的时间。给子例程分配使用 CPU 时间被称为概要分析,而给源程序代码行分配使用 CPU 时间被称为微概要分析。
对于子例程级概要分析,不用修改可执行程序即可运行 tprof 命令,就是说不必使用专用编译器标志进行重新编译。除非已除去回退表,否则即使可执行程序已卸载也还是如此运行。但是,必需进行重新编译才能获取微概要分析文件,除非列表文件已经可用。要在一个程序上执行微概要分析,要么用 -g 来编译该程序且源文件应可访问 tprof,要么用 -qlist 来编译该程序,且对象列表文件和源文件或者只有对象列表文件对于 tprof 应该是可访问的。要充分利用 tprof 微概要分析能力,最好既提供 .lst 列表文件又提供源文件。
tprof 可用以下四种方式运行:
如果指定 -x 标志但未指定 -A 标志,则 tprof 以实时方式运行。在实时方式下,tprof 在后台启动 AIX trace 实用程序并处理所产生的跟踪数据。当被概要分析的程序结束时,tprof 收集符号名称信息并生成报告。
如果指定 -A 标志带 -x 标志,则 tprof 以自动离线方式运行。在此方式下,tprof 启动 AIX trace 实用程序,并将跟踪数据记录在一个文件中。一旦跟踪数据收集完成,就收集符号名信息,tprof 打开跟踪日志文件并处理数据以生成报告。 在此方式下,除了tprof 报告文件,tprof 生成以下文件:
任何时候 tprof 命令都可重新处理这些文件来生成概要分析报告。这被称为人工离线方式。RootString.syms 文件包含符号名称信息,与 gensyms 命令的输出相似。 RootString.trc [-cpuid] 文件是跟踪日志文件。当每个 CPU 跟踪功能打开时,-cpuid 被添加到名称上。在此情况下,每个文件仅包含来自一个 CPU 的跟踪数据。
这些文件是 cooked,即它们是正常跟踪和名称文件的一个预处理版本。tprof 后处理 cooked 文件更快。
如果 -A 标志和 -x 标志都未指定,则 tprof 要么以人工离线方式运行,要么以后处理方式运行。要 tprof以后处理方式运行,以下文件必须可用:
当 tprof 带 -c 标志(以除了后处理方式以外的任何方式)运行时,就生成了这些文件。要tprof 以人工离线方式运行,以下文件必须可用:
通过用户人工使用 gensyms 命令和 AIX 跟踪工具,或者通过不带 -c 标志以自动离线方式运行 tprof 来生成这些文件。
tprof 生成一个名为 RootString.prof 的报告文件,该文件可以是进程、线程、对象代码和子例程级概要分析报告。该文件可包含以下部分和子节:
摘要报告部分总是在 RootString.prof 报告文件中。基于概要分析标志,全局概要分析部分的各个子节可被打开和关闭:
进程和线程级概要分析部分是为用 -p、-P 和 -t 标志选择的进程和线程创建的。存在于每个进程的每个线程的每个部分中的子节等同于存在于全局部分中的子节,使用概要分析标志(-u、-s、-k、-e、-j)来选择这些子节。
当用 -C 标志调用时,tprof 也有选择地生成每个 CPU 的概要分析报告(每个 CPU 生成一个概要分析报告)。生成的 tprof 报告有相同的结构,用约定的规则给它命名:RootString.prof[-cpuid]。
如果指定 -m,则 tprof 生成微概要分析报告。报告使用以下命名约定:RootString.source.mprof,其中 source 是源文件的基本名。如果有多个源文件有相同的基本名,则一个唯一标识它们的号码附加在报告文件名后面,例如,RootString.Filename.c.mprof-1。微概要分析报告含如下信息:
如果一个源文件不存在 ,但有一个 .lst 文件存在,tprof 仅显示基于源文件行和来自 .lst 文件的指令的 CPU 使用情况。
如果这些文件都不存在,但源文件用 -g 编译过,则 tprof 可检索源文件行号,并生成一个相似的报告,但源文件代码列丢失。
以下限制适用于运行 tprof 命令的非 root 用户:
解析 CPU 活动的程度取决于获得的样本数目以及热点的程度。当一个带有几个热点的程序可用相对较少的样本进行概要分析时,程序的较少执行的部分在概要分析报告中不可见,除非获得更多的样本。在用户程序运行少于一分钟的情况下,要在评估中获得高可信度的分辨率可能不够。
一个简单的方案是重复执行用户程序或脚本直到达到所需的分辨率。程序运行时间越长,概要分析分辨率就越高。如果你怀疑概要分析的准确度,运行 tprof 命令几次即可,然后比较所产生的概要分析文件。
在这三个命令之间最重要区别是 tprof 收集数据而不会影响被概要分析的程序的执行时间,而且除了生成微概要分析报告以外,无需重新编译就可以处理已实现优化和分解的二进制文件。 gprof 和 prof 都没有微概要分析的能力,也不能处理已进行优化或分解的二进制文件(它们需要专门编译标志),而且重要的是在执行期间会产生程序执行降速。
prof 和 gprof 工具都是标准的,是许多 UNIX 系统(包括此操作系统)上受支持的概要分析工具。prof 和 gprof 提供了子程序概要分析功能,以及每个子程序被调用的次数的精确计数。gprof 命令也提供了一个非常有用的调用图,显示每个子程序被特定父程序调用的次数和每个子程序调用其子的次数。tprof 命令既不提供子程序调用计数,也不提供调用图信息。
像 tprof 命令一样,prof 和 gprof 命令都通过采样用户程序的程序计数器来获取每个子程序的 CPU 消耗量估计。
tprof 收集整个系统的 CPU 的使用信息,而 prof 和 gprof 仅收集单个程序和仅在用户方式下所花时间的概要分析信息。tprof 也提供已概要分析的用户程序执行期间所有活动进程的摘要以及完全支持库和内核方式概要分析的摘要。
tprof 支持 JAVA 应用程序的概要分析,而 prof 和 gprof 不支持。
$ tprof -x sleep 10 2002 年 3月 20 日 星期一 00:39:26 系统:AIX 5.2 节点:dreaming 机器:000671894C00 启动命令 sleep 10 停止跟踪收集。 生成 sleep.prof
产生的 sleep.prof 文件仅包含摘要报告部分。
$ tprof -skeuj -x sleep 10 2002 年 3月 20 日 星期一 00:39:26 系统:AIX 5.2 节点:dreaing 机器:000671894C00 启动命令 sleep 10 停止跟踪收集。 生成 sleep.prof
产生的 sleep.prof 文件包含摘要报告部分和全局概要分析部分。
$ tprof -u -p workload -x workload 2002 年 3月 20 日 星期一 00:39:26 系统:AIX 5.2 节点:dreaing 机器:000671894C00 启动命令 workload,停止跟踪收集。 生成 workload.prof
产生的 workload.prof 文件包含摘要报告和全局用户方式概要分析部分,以及仅包含一个用户方式概要分析子节的进程‘workload’的一个进程级概要分析部分。
$ tprof -se -p send,receive -x startall 2002 年 3月 20 日 星期一 00:39:26 系统:AIX 5.2 节点:dreaming 机器:000671894C00 启动命令 startall 停止跟踪收集。 生成 startall.prof
产生的 startall.prof 文件包含摘要报告、全局共享库方式概要分析、全局内核扩展例程概要分析部分以及两个进程级概要分析部分:一个为进程‘send’,一个为进程‘receive’。每个进程级部分包含两个子节:一个为共享库概要分析信息,一个为内核扩展概要分析信息。
$ tprof -m ./tcalc -u -x ./tcalc 2002 年 3月 20 日 星期一 00:47:09 系统:AIX 5.2 节点:dreaming 机器:000671894C00 启动命令 ./tcalc 停止跟踪收集。 生成 tcalc.prof 生成 tcalc.tcalc.c.mprof
产生的 tcalc.prof 文件包含摘要报告和全局用户方式概要分析部分。 产生的 tcalc.tcalc.c.mprof 文件包含微概要分析报告。
tprof -c -A all -x sleep 10 启动命令 sleep 10 停止跟踪收集。 2002 年 3 月 20 日,星期一 00:52:52 系统:AIX 5.2 节点:dreaming 机器:000671894C00 生成 sleep.ctrc 生成 sleep.csyms 生成 sleep.prof
产生的 sleep.prof 文件只有一个摘要报告部分,而两个 cooked 文件准备进行重新后处理。
如果您的系统显示如下消息:
/dev/systrace:设备忙或 trcon:TRCON:无此设备
这表示 trace 工具正在使用。输入 trcstop 停止跟踪后,停止程序并再试一次。
gensyms 命令、gprof 命令、prof 命令、stripnm 命令和 trace 守护进程。