AIX命令参考大全,卷 5,s - u - tprof 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 5,s - u

tprof 命令

用途

报告 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 } }

注:
  1. 除路径列表外,所有的列表类型输入用逗号分隔,路径列表用冒号分隔。
  2. 当此命令以实时方式运行时,每个 CPU 的概要分析方式自动禁用。
  3. 如果每个 CPU 概要分析被打开,则其微概要分析自动禁用。
  4. 如果指定 -x 标志不带 -A 标志,则 tprof 以实时方式运行。
  5. 如果指定 -x 标志带 -A 标志,则 tprof 以自动离线方式运行。
  6. 如果 -x 标志省略,则 tprof 以后处理方式或人工离线方式运行,这取决于有无 cooked 文件和 -F 标志。

描述

tprof 命令报告单个程序和整个系统的 CPU 使用情况。对任何使用可能是 CPU 受限的 JAVA、C、C++ 或 FORTRAN 程序的人,和想了解程序的哪些部分大量占用 CPU 的人,该命令是一个有用的工具。

tprof 命令负责分配对象代码、进程、线程、子例程(用户方式、内核方式以及共享库),甚至是程序的源代码行或单个指令使用 CPU 的时间。给子例程分配使用 CPU 时间被称为概要分析,而给源程序代码行分配使用 CPU 时间被称为微概要分析。

对于子例程级概要分析,不用修改可执行程序即可运行 tprof 命令,就是说不必使用专用编译器标志进行重新编译。除非已除去回退表,否则即使可执行程序已卸载也还是如此运行。但是,必需进行重新编译才能获取微概要分析文件,除非列表文件已经可用。要在一个程序上执行微概要分析,要么用 -g 来编译该程序且源文件应可访问 tprof,要么用 -qlist 来编译该程序,且对象列表文件和源文件或者只有对象列表文件对于 tprof 应该是可访问的。要充分利用 tprof 微概要分析能力,最好既提供 .lst 列表文件又提供源文件。

tprof 可用以下四种方式运行:

  1. 实时或在线方式
  2. 人工离线方式
  3. 自动离线方式
  4. 后处理方式

如果指定 -x 标志但未指定 -A 标志,则 tprof 以实时方式运行。在实时方式下,tprof 在后台启动 AIX trace 实用程序并处理所产生的跟踪数据。当被概要分析的程序结束时,tprof 收集符号名称信息并生成报告。

注:
此方式不允许对每个 CPU 进行概要分析。

如果指定 -A 标志带 -x 标志,则 tprof 以自动离线方式运行。在此方式下,tprof 启动 AIX trace 实用程序,并将跟踪数据记录在一个文件中。一旦跟踪数据收集完成,就收集符号名信息,tprof 打开跟踪日志文件并处理数据以生成报告。 在此方式下,除了tprof 报告文件,tprof 生成以下文件:

  1. RootString.syms
  2. RootString.trc[-cpuid]
注:
tprof 使用的所有输入文件和报告文件都被命名为 RootString.suffix,其中 RootString 要么用 -r 指定,要么是用 -x 指定的程序名。

任何时候 tprof 命令都可重新处理这些文件来生成概要分析报告。这被称为人工离线方式。RootString.syms 文件包含符号名称信息,与 gensyms 命令的输出相似。 RootString.trc [-cpuid] 文件是跟踪日志文件。当每个 CPU 跟踪功能打开时,-cpuid 被添加到名称上。在此情况下,每个文件仅包含来自一个 CPU 的跟踪数据。

注:
如果 -c-A 一起使用,则不生成这两个文件。而是创建了以下两个文件:
  1. RootString.csyms
  2. RootString.ctrc[ -cpuid ]

这些文件是 cooked,即它们是正常跟踪和名称文件的一个预处理版本。tprof 后处理 cooked 文件更快。

如果 -A 标志和 -x 标志都未指定,则 tprof 要么以人工离线方式运行,要么以后处理方式运行。要 tprof以后处理方式运行,以下文件必须可用:

  1. RootString.csyms
  2. RootString.ctrc[ -cpuid ]

tprof-c 标志(以除了后处理方式以外的任何方式)运行时,就生成了这些文件。要tprof 以人工离线方式运行,以下文件必须可用:

  1. RootString.syms
  2. RootString.trc [-cpuid]

通过用户人工使用 gensyms 命令和 AIX 跟踪工具,或者通过不带 -c 标志以自动离线方式运行 tprof 来生成这些文件。

注:
tprof 总是首先查找 RootString.csymsRootString.ctrc[-cpuid]。仅当这些文件不可用时,才查找 RootString.symsRootString.trc[-cpuid]。要阻止 tprof 查找 rootstring.csyms RootString.ctrc[-cpuid],也就是说,强制使用人工离线方式,请使用 -F 标志。

tprof 生成一个名为 RootString.prof 的报告文件,该文件可以是进程、线程、对象代码和子例程级概要分析报告。该文件可包含以下部分和子节:

  1. 摘要报告部分
    1. 按进程名的 CPU 使用情况摘要
    2. 按线程(tid)的 CPU 使用情况摘要
  2. 全局(关于系统中所有进程的执行情况)概要文件部分
    1. 用户方式例程的 CPU 使用情况
    2. 内核例程的 CPU 使用情况
    3. 内核扩展的 CPU 使用情况摘要
    4. 每个内核扩展的子例程的 CPU 使用情况。
    5. 共享库的 CPU 使用情况摘要
    6. 每个共享库的子例程的 CPU 使用情况。
    7. 每个 JAVA 类的 CPU 使用情况。
    8. 每个 JAVA 类的每个 JAVA 方法的 CPU 使用情况。
  3. 进程和线程级概要分析部分(每个进程或线程为一个部分)
    1. 适用于本进程/线程的用户方式例程的 CPU 使用情况
    2. 适用于本进程/线程的内核例程的 CPU 使用情况
    3. 适用于本进程/线程的内核扩展的 CPU 使用情况摘要。
    4. 适用于本进程/线程的每个内核扩展的子例程的 CPU 使用情况。
    5. 适用于本进程/线程的共享库的 CPU 使用情况摘要。
    6. 适用于本进程/线程的每个共享库的子例程的 CPU 使用情况。
    7. 适用于本进程/线程的每个 JAVA 类的 CPU 使用情况。
    8. 适用于本进程/线程的每个 JAVA 类的 JAVA 方法的 CPU 使用情况。

摘要报告部分总是在 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。微概要分析报告含如下信息:

  1. 作过注释的源文件的全路径名。
  2. 与概要文件样本符合的、含有源文件的所有行号的热行概要文件部分,它按 CPU 的使用情况进行排序。对于每个源行,用一行来报告所有进程所用时间的百分比,其后跟有按单个进程细分的其它行。
  3. 一个该源文件中每个功能的源行概要分析部分,包括 CPU 使用情况。该部分包含源行号、CPU 的使用情况和源代码。如果该源文件的 .lst 文件可访问 tprof,则将来自 .lst 文件的指令行和来自源文件的源行集结在一起并适当分配 CPU 的使用。对于每个源文件,这将由指令提供中断。

    如果一个源文件不存在 ,但有一个 .lst 文件存在,tprof 仅显示基于源文件行和来自 .lst 文件的指令的 CPU 使用情况。

    如果这些文件都不存在,但源文件用 -g 编译过,则 tprof 可检索源文件行号,并生成一个相似的报告,但源文件代码列丢失。

    注:
    如果请求每个 CPU 进行概要分析,则微概要分析自动禁用。如果 .c 文件包含在另一个.c 文件中,则 tprof 不能报告正确的源文件行信息。tprof 不能对 JAVA 类或方法进行微概要分析。

以下限制适用于运行 tprof 命令的非 root 用户:

  1. Tprof 将不能验证正在运行的内核与 /unix 文件相同。这就意味着即使显示警告消息,在多数情况下,正在运行的内核与 /unix 也是相同的,因此数据应该准确。
  2. 当由非 root 用户运行 gennames 时,给出与限制 #1(以上所述)相同的警告,并标记 gennames 文件。如果在脱机方式下运行 tprof,则 gennames 文件将 tprof 标记为未验证内核。
  3. tprof 将不能打开并读没有设置读许可权的文件上的符号。一些专用、共享库不具有读许可权,而一些内核扩展不可读。

概要分析的准确性

解析 CPU 活动的程度取决于获得的样本数目以及热点的程度。当一个带有几个热点的程序可用相对较少的样本进行概要分析时,程序的较少执行的部分在概要分析报告中不可见,除非获得更多的样本。在用户程序运行少于一分钟的情况下,要在评估中获得高可信度的分辨率可能不够。

一个简单的方案是重复执行用户程序或脚本直到达到所需的分辨率。程序运行时间越长,概要分析分辨率就越高。如果你怀疑概要分析的准确度,运行 tprof 命令几次即可,然后比较所产生的概要分析文件。

tprof 对 prof 和 gprof 之间的比较

在这三个命令之间最重要区别是 tprof 收集数据而不会影响被概要分析的程序的执行时间,而且除了生成微概要分析报告以外,无需重新编译就可以处理已实现优化和分解的二进制文件。 gprofprof 都没有微概要分析的能力,也不能处理已进行优化或分解的二进制文件(它们需要专门编译标志),而且重要的是在执行期间会产生程序执行降速。

profgprof 工具都是标准的,是许多 UNIX 系统(包括此操作系统)上受支持的概要分析工具。profgprof 提供了子程序概要分析功能,以及每个子程序被调用的次数的精确计数。gprof 命令也提供了一个非常有用的调用图,显示每个子程序被特定父程序调用的次数和每个子程序调用其子的次数。tprof 命令既不提供子程序调用计数,也不提供调用图信息。

tprof 命令一样,profgprof 命令都通过采样用户程序的程序计数器来获取每个子程序的 CPU 消耗量估计。

tprof 收集整个系统的 CPU 的使用信息,而 profgprof 仅收集单个程序和仅在用户方式下所花时间的概要分析信息。tprof 也提供已概要分析的用户程序执行期间所有活动进程的摘要以及完全支持库和内核方式概要分析的摘要。

tprof 支持 JAVA 应用程序的概要分析,而 profgprof 不支持。

标志

-A {all | CPUList } 打开自动离线方式。无参数则关闭每个 CPU 跟踪程序。all 启用所有 CPU 跟踪程序。CPUList 是一个用逗号分隔的要被跟踪的 CPU 标识列表。
-c 打开 cooked 文件的生成。
-C all | CPUList 打开每个 CPU 概要分析功能。指定 all 来生成所有 CPU 的概要分析报告。如果用列表 CPUlist,则 CPU 的数目应用逗号隔开(如,0,1,2)。
注:
仅当每个 CPU 跟踪程序要么在自动离线方式下打开,要么在人工离线方式下使用的时候,每个 CPU 概要分析才可能进行。而在在线方式下,则完全不可能。
-d 打开延时跟踪方式,该方式延时数据收集直到 trcon 被调用为止。
-D 打开详细概要分析功能,它通过每个子例程中的偏移指令显示 CPU 使用情况。
-e 打开内核扩展概要分析功能。
-F 覆盖 cooked 文件(如果存在)。如果没有用 -x 标志使用的话,则强制使用人工离线方式。
-j 打开 JAVA 类和方法概要分析功能。
-k 启用内核概要分析功能。
-l 启用长文件名报告。缺省情况下,如果子程序、程序和源文件名不适合概要分析报告中的可用空间,则 tprof 截断这些名称。该标志禁用截取。
-m ObjectsList 启用由用逗号分隔的列表 Objectlist 指定的对象的微概要分析功能。可执行文件、共享库以及内核扩展都可进行微概要分析。给库和内核扩展指定归档名。
注:
  1. 要启用程序的微概要分析功能,必须打开用户方式概要分析功能(-u)。
  2. 要启用共享库的微概要分析功能,必须打开共享库概要分析功能(-s)。
  3. 要启用内核扩展例程微概要分析功能,必须打开内核扩展例程概要分析功能(-e)。
-M PathList 指定源路径列表。PathList 是一个用冒号隔开的路径列表,搜索该列表以查找微概要分析所需的源文件和 .lst 文件。
注:
缺省情况下,源路径列表是对象搜索路径列表。
-p ProcessList 启用在 ProcessList 中指定的进程名的进程级概要分析功能。ProcessList 是一个用逗号分隔的进程名列表
注:
仅当至少有一个概要分析方式(-u-s-k-e-j)被打开,进程级概要分析才启用。
-P { all | PIDList } 启用遇到的所有进程或 PIDList 指定进程的进程级概要分析功能。 PIDList 是一个用逗号分隔的进程标识列表。
注:
仅当至少有一个概要分析方式(-u-s-k-e-j)被打开,进程级概要分析才启用。
-r RootString 指定 RootString。所有 tprof 输入和报告文件都有 RootString.suffix 格式的名称。
注:
如果未指定 -r,则 RootString 缺省为 -x 标志指定的程序名。
-s 启用共享库概要分析功能。
-S PathList 指定对象搜索 PathListPathList 是一个用冒号隔开的路径列表,搜索该列表以查找可执行文件、共享库和内核扩展。
注:
缺省对象搜索 PathList 是环境路径列表($PATH)。
-t 启用线程级概要分析功能。
注:
如果 -p-P 没有带 -t 标志一起指定,则 -t 等价于 -P all -t。否则,为选定的进程启用线程级报告。仅当至少有一个概要分析方式(-u-s-k-e-j)启用时,线程级概要分析才启用。
.
-T BufferSize 指定跟踪 BufferSize
注:
该标志表示仅在实时方式或自动离线方式下有效。
-u 启用用户方式概要分析功能。
-v 启用详细方式。
-V File 将详细输出存储在指定的 File 中。
-x Program 指定将由 tprof 执行的程序。当 Program 完成或用 trcofftrcstop 手工停止 trace 时,停止数据收集
注:
-x 标志必须是在 tprof 中指定的标志列表中的最后一个标志。
-z 用先前版本的 tprof 来启用兼容方式。缺省情况下,CPU 使用情况仅用百分比来报告。当使用 -z 时,tprof 也报告滴答数。该标志还在子例程报告中添加“地址”栏和“字节”栏。

示例

  1. 基本全局程序和线程级摘要
    $ tprof -x sleep 10
    2002 年 3月 20 日 星期一 00:39:26  系统:AIX 5.2 节点:dreaming 机器:000671894C00
    启动命令 sleep 10
    停止跟踪收集。
    生成 sleep.prof 

    产生的 sleep.prof 文件仅包含摘要报告部分。

  2. 带有所有选项的全局概要分析
    $ tprof -skeuj -x sleep 10
    2002 年 3月 20 日 星期一 00:39:26  系统:AIX 5.2 节点:dreaing 机器:000671894C00
    启动命令 sleep 10
    停止跟踪收集。
    生成 sleep.prof 

    产生的 sleep.prof 文件包含摘要报告部分和全局概要分析部分。

  3. 单个进程级概要分析
    $ tprof -u -p workload -x workload 
    2002 年 3月 20 日 星期一 00:39:26  系统:AIX 5.2 节点:dreaing 机器:000671894C00
    启动命令 workload,停止跟踪收集。
    生成 workload.prof  

    产生的 workload.prof 文件包含摘要报告和全局用户方式概要分析部分,以及仅包含一个用户方式概要分析子节的进程‘workload’的一个进程级概要分析部分。

  4. 多个进程级概要分析
    $ 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’。每个进程级部分包含两个子节:一个为共享库概要分析信息,一个为内核扩展概要分析信息。

  5. 微概要分析
    $ 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 文件包含微概要分析报告。

  6. 自动离线方式
    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 守护进程。

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]