tprof 命令

用途

报告处理器用途。

语法

tprof { [ -c ] [ -C { all | cpulist }] [ -d ] -D ] [ -e ] [ -@ {ALL | wparlist }] [[ { -E [ mode [ -b ] [ -B ]} ] [ -f frequency ]] [ -F ] [-I] [ -j ] [ -k ] [ -l ] [-L objectlist] [ -m objectslist ] [ -M sourcepathlist ] [-N] [ -p processlist ] [ -P { all | pidslist }] [ -s ] [ -S searchpathlist ] [ -t ] [ -T buffersize ] [ -u ] [ -v ] [ -V verbosefilename ] [-g] [-G "start=mmddhhmmssyy" ,end=mmddhhmmssyy] [-O options]{[-z] [-Z] | -R } {{ -r rootstring } | {[ -A { all | cpulist } [ -n ]] [ -r rootstring [ -X [ timedata [, 存储区= N]]] { -x 程序 | -y 程序 }}}} { -a [ -A [all]] [ -f 频率 ] [ -F ] [ -v ] [ -z ] [ -V verbosefilename ] [ -T buffersize ] {{[ -r rootstring ] -y program } | { -r rootstring }} }
注意:
  • 除路径列表外,所有的列表类型输入用逗号分隔,路径列表用冒号分隔。
  • 在实时方式下运行时,会自动禁用多概要分析方式。
  • 如果打开每个处理器概要分析将自动禁用微概要分析。
  • 如果 tprof 命令以实时方式运行,将忽略指定的日志缓冲区大小。
  • 如果指定 -x 标志不带 -A 标志,那么 tprof 以实时方式运行。
  • 如果指定 -x 标志带 -A 标志,那么 tprof 以自动脱机方式运行。
  • 如果 -x 标志省略,那么 tprof 以后处理方式或人工脱机方式运行,这取决于有无 cooked 文件和 -F 标志。
  • 如果 tprof 命令以实时或自动脱机方式在 工作负载分区 中运行,那么会自动禁用 -@ 标志。
  • -y 标志只能与 -E 标志或 -a 标志一起使用。
  • The -O showaddrbytes=on 选项不能与 -z 选项一起使用。
  • The -O wrapfname=on 选项应该与 -l 选项一起使用。
  • The -G 选项只能在后处理模式中使用。
  • -O pdetails=on 选项只能与 -p 选项配合使用。
  • 当对采用 -A 选项手动收集 tprof 后处理模式的轨迹时,必须指定 trace 命令的 -pPI 选项。

描述

tprof 命令报告单个程序和系统作为一个整体的处理器使用情况。 此命令对于具有 Java™, C , C++ 或 FORTRAN 程序的任何人都是有用的工具,这些程序可能与处理器绑定,并且他们希望知道程序的哪些部分使用处理器最频繁。

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

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

tprof 命令可运行于以下方式:
  • 实时或在线方式
  • 人工脱机方式
  • 自动脱机方式
  • 后处理方式
如果指定 -x 标志但不指定 -A 标志,那么 tprof 命令将在实时方式下运行。 在实时模式下,tprof命令会在后台启动AIX® 跟踪实用程序,并在生成跟踪数据时对其进行处理。 当被概要分析的程序结束时,tprof 收集符号名称信息并生成 tprof 报告。
注: 此方式不允许按处理器进行概要分析。
如果指定 -x 标志和 -A 标志,那么 tprof 命令将在自动脱机方式下运行。 在此方式下, tprof 命令启动 AIX trace 实用程序并将跟踪数据记录到文件中。 在完成跟踪数据收集之后,它将收集符号名称信息,然后 tprof 命令将打开跟踪日志文件并处理数据以生成报告。 在此方式下,tprof 命令将生成下列文件以及 tprof 报告文件:
  • rootstringsyms
  • rootstringtrc [-cpuid]

tprof 命令所使用的所有输入和报告文件均命名为 rootstring.suffix,其中 rootstring 是使用 -r 标志来指定,或者是使用 -x 标志来指定的程序名。

在实时方式和自动脱机方式下,会将进行概要分析的程序数据区的 ulimit 值设置为 unlimited

在自动脱机方式下,可以指定 -N 标志以将源行信息收集到所生成的 RootString.syms 文件。 并且可以指定 -I 标志以将二进制指令收到到所生成的 RootString.syms 文件。

任何时候 tprof 命令都可重新处理这些文件来生成概要分析报告。 这被称为人工脱机方式。 rootstring.syms 文件包含符号名称信息,这些信息与 gensyms 命令的输出相似。 rootstring.trc[-cpuid] 文件是跟踪日志文件。 启用每个处理器跟踪时,会将 -cpuid 添加到名称中。 在这种情况下,每个文件只包含来自一个处理器的跟踪数据。

如果指定 -c 标志和 -A 标志,那么将不生成 rootstring.symsrootstring.trc[-cpuid] 文件。 而是创建以下两个文件:
  • rootstring.csyms
  • rootstring.ctrc [ -cpuid ]
这些文件是 cooked,即它们是正常跟踪和名称文件的一个预处理版本。 tprof 后处理 cooked 文件更快。
如果未指定 -A 标志和 -x 标志,那么 tprof 命令将在人工脱机方式或后处理方式下运行。 要在后处理方式下运行 tprof 命令,必须提供下列文件:
  • rootstring.csyms
  • rootstring.ctrc [ -cpuid ]

如果在运行 tprof 命令(在后处理方式之外的任何其他方式下)时指定了 -c 标志,那么将生成这些文件。

要在人工脱机方式下运行 tprof 命令,必须提供下列文件:
  • rootstring.syms
  • rootstring. trc [-cpuid] (-cpuid )

要生成这些文件,需要手动运行 gensyms 命令和 AIX 跟踪工具。 或者在没有 -c 标志的情况下以自动脱机方式运行 tprof 命令。

tprof 命令始终首先查找 rootstring.csymsrootstring.ctrc[-cpuid] 文件。 只有在这些文件不可用时,才查找 rootstring.symsrootstring.trc[-cpuid] 文件。 要阻止 tprof 命令查找 rootstring.csymsrootstring.ctrc[-cpuid] 文件(即,强制执行人工脱机方式),请使用 -F 标志。

如果输入符号文件包含解碾压名称,那么将不能使用 -Z 标志。

tprof 命令生成 tprof 报告文件 rootstring.prof,该文件存放进程、线程、对象文件和子例程级别概要分析报告。 该文件可包含以下部分和子节:
  • 摘要报告部分:
    • 处理器使用情况摘要(按处理器名称)
    • 处理器使用情况摘要(按线程(tid))
  • 全局(有关系统中所有进程的执行情况)概要文件部分:
    • 用户方式例程的处理器使用情况
    • 内核例程(包括以内核方式调用的 milicode 例程)的处理器使用情况
    • 内核扩展的处理器使用情况摘要
    • 每个内核扩展的子例程的处理器使用情况
    • 隐式装入的、全局及指定共享库和以用户方式调用的 milicode 例程的处理器使用情况摘要
    • 每个共享库的子例程的处理器使用情况
    • 每个 Java 类的处理器使用情况
    • 每个 Java 类的每个 Java 方法的处理器使用情况
  • 进程和线程级概要分析部分(每个进程或线程为一个部分):
    • 该进程/线程的用户方式例程的处理器使用情况
    • 该进程/线程的内核例程(包括以内核方式调用的 milicode 例程)的处理器使用情况
    • 该进程/线程的内核扩展的处理器使用情况摘要
    • 该进程/线程的每个内核扩展的子例程的处理器使用情况
    • 该进程/线程的隐式装入的、全局及指定共享库和以用户方式调用的 milicode 例程的处理器使用情况摘要
    • 该进程/线程的每个共享库的子例程的处理器使用情况
    • 此进程/线程的每个 Java 类的处理器使用情况
    • 此进程/线程的每个 Java 类的 Java 方法的处理器使用情况
摘要报告部分总是在 rootstring.prof 报告文件中。 可以使用下列概要分析标志来打开或关闭全局概要文件部分的各个子节:
  • -u 打开子节 a
  • -k 打开子节 b
  • -e 打开子节 c 和 d
  • -s 打开子节 e 和 f
  • -j 打开子节 g 和 h

如果指定 -p-P-t 标志,那么将为进程和线程创建进程和线程级别概要文件部分。 存在于每个进程的每个线程的每个部分中的子节等同于存在于全局部分中的子节,使用概要分析标志(-u-s-k-e-j)来选择这些子节。

(可选)如果在运行 tprof 命令时指定 -C 标志,那么该命令还将生成每个处理器的概要分析报告,这些报告包含每个处理器的一个概要分析报告。 所生成的 tprof 报告具有相同结构,按约定对它们进行命名:rootstring.prof[-cpuid]。

如果指定 -m 标志,那么 tprof 命令将生成微概要分析报告。 报告使用以下命名约定:rootstring.source.mprof,其中 source 是源文件的基名。 如果有多个源文件具有相同的基名,那么将在报告文件名之后附加一个唯一编号,对这些文件进行标识。 例如,rootstring.Filename.c.mprof-1。 微概要分析报告含如下信息:
  • 带注释的源文件的完整路径名。
  • 一个热行概要文件部分,该部分包含来自概要分析样本命中的源文件的所有行号,这些行号按照处理器使用情况排序。 对于每个源行,用一行来报告所有进程所用时间的百分比,其后跟有按单个进程细分的其他行。
  • 该源文件中每个函数的源行概要文件部分,其中包含处理器使用情况。 本部分包含源行号、处理器使用情况和源代码。 如果 tprof 可以访问源文件的 .lst 文件,那么它将使 .lst 文件的指令行与源文件的源行交错,并相应控制处理器使用情况。 这位每个源文件提供了按指令的细目分类。

    如果源文件不存在,但是 .lst 文件存在,tprof 只显示基于源行和来自 .lst 文件的指令的处理器使用情况。

    如果 .lst 文件和源文件都不存在,但源文件是使用 -g 标志进行编译,那么 tprof 命令检索源行号并用缺少的源代码列生成类似的报告。
    注: 如果请求按处理器进行概要分析,那么将自动禁用微概要分析。 如果 .c 文件包含在另一个 .c 文件中,那么 tprof 命令不能报告正确的源文件行信息。 tprof 命令不能微概要文件 Java 类或方法。

如果指定 -m 标志,那么会自动指定 -N 标志以在自动脱机方式下将源行信息收集到符号文件。

如果指定 -Z 标志和 -m 标志,那么每个子例程生成一个报告文件。 使用以下命名约定: RootString.source.routine.mprof,其中 例程 是源文件中列出的其中一个子例程的名称。 此外,还会创建一个名为 RootString.source.HOT_LINES.mprof 的文件,其中包含上述热行概要分析信息。

如果指定 -L 标志,那么 tprof 命令将生成带注释的列表文件。 这些文件使用以下命名约定: RootString.source.alst,其中 source 是源文件的基本名称。 如果有多个源文件具有相同的基名,那么将在报告文件名之后附加一个唯一编号,对这些文件进行标识。 例如, RootString.Filename.c.alst-1。 如果指定 -Z 标志和 -L 标志,那么每个子例程生成一个报告文件。 然后使用以下命名约定: RootString.source.routine.alst,其中 例程 是源文件中列出的其中一个子例程的名称。

如果在使用 JPA (-x java -Xrunjpa-x java -agentlib:jpa) 对 Java 程序进行概要分析时指定 -N 标志或 -I 标志, 如果将相应参数添加到 -Xrunjpa 标志-agentlib:jpa 标志,那么可以收集 JIT 源行号和指令:
  • source=1打开 JIT 源代码行收集(需要IBM®JRE1.5.0 或更高版本)。
  • instructions=1 打开 JIT 指令收集。
以下限制适用于运行 tprof 命令的非 root 用户:
  • tprof 将不能验证正在运行的内核是否与 /unix 文件相同。 这就意味着即使显示警告消息,在多数情况下,正在运行的内核与 /unix 也是相同的,因此数据应该准确。
  • 当由非 root 用户运行 gensyms 命令时,将给出与限制 #1(以上所述)相同的警告,并标记 gensyms 文件。 如果在脱机方式下运行 tprof,那么使用 gensyms 命令创建的文件将根据未验证的内核来标记 tprof
  • tprof 将无法打开和读取未设置读许可权的文件上的符号。 一些专用、共享库不具有读许可权,而一些内核扩展不可读。

基于时间的概要分析与基于事件的概要分析

缺省情况下, tprof 基于时间,并由 decrementer 中断驱动。 概要分析的另一种方式是基于事件的概要分析,在这种方式下,中断是由基于软件的事件或通过性能监视器事件驱动的。 对于基于事件的概要分析,采样频率和概要分析事件都会随着命令行的不同而不同。

-E 标志启用基于事件的概要分析。 -E 标志是四个基于软件的事件 (仿真,对齐,ISLB炜,DLB炜) 或 PERFORMANCE MONITOR 事件 (PM_ *) 中的一个。 缺省情况下,概要分析事件是处理器周期。 所有性能监视器事件前面都有 PM_(例如,PM_CYC 表示处理器周期,PM_INST_CMPL 表示指令已完成)。 pmlist 列出了处理器上支持的所有性能监视器事件。 所选 "性能监视器" 事件必须在一个组中生成,在该组中我们还可以找到 PM_RUN_INST_CMPL "性能监视器" 事件。 POWER4 和更高版本的处理器上,对标记的事件进行概要分析会提高准确性。 标记的事件具有 PM_MRK_ 前缀。

如果指定 -y 标志,那么仅对指定的程序及其后代执行概要分析。 -y 标志只能与 -E-a 标志一起使用。

-f 标志改变基于事件的概要分析的采样频率。 对于基于软件的事件和处理器周期,受支持的频率范围是 1 至 500 毫秒,缺省值为 10 毫秒。 对于所有其他的性能监视器事件,其范围是 10000 至发生事件的 MAXINT 次数,缺省值为 10000 个事件。 如果指定 -f 标志和 -y 标志,那么对于其他性能监视器事件,采样频率的范围介于 1 至 MAXINT 次数,缺省值为 10000 个事件。

将其他信息添加到 .prof 文件以反映处理器名称,概要分析事件和采样频率。

Java 应用程序概要分析

要对 Java 应用程序进行概要分析,必须指定 -j 标志, 并使用 -Xrunjpa API (用于在 Java 5 和更低版本的 JVM 上运行) 或 java 命令行选项的 -agentlib:jpa (用于在 Java 6 JVM 上运行) 来启动应用程序。 如果指定此选项,那么每次将新的类和方法装入内存时,JVM 会自动调用 jpa 库。 该库将依次收集名为 /tmp/JavaPID.syms的文件中的方法和类的地址到名称映射信息,其中 PID 是运行 Java 虚拟机的进程的进程标识。 tprof 命令将自动查找此目录来获取这种文件。

如果在自动脱机方式下运行,或选择 cooking 标志,那么 tprof 命令会将 JavaPID.syms 文件中包含的信息复制到 RootString.symsRootString.csyms 文件。 然后可以删除 /tmp 中的相应文件。 tprof 命令用户应该将目录内容保持最新。 当停止与特定 JavaPID.syms 相符的 JVM 时,应该删除此文件。

概要文件准确度

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

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

信息

-@ 标志控制将 WPAR 信息添加到 tprof 报告。 子选项指定向某些报告节包含什么信息;这些子选项为下面一种格式:
  • -@ 标志单独 (即,不带子选项) 添加处理器使用情况 WPAR 名称的摘要。 此外,将显示按进程和线程汇总处理器使用情况的部分中列出的每个进程的 WPAR 名称。
  • ALL 子选项使 tprof 报告包含整个系统以及每个正在运行的 WPAR的进程,线程,对象文件和子例程级别概要分析报告。
  • WPAR 名称的逗号分隔列表会导致 tprof 报告中每个指定的 WPAR 的进程,线程,对象文件和子例程级别概要文件部分。
注:WPAR 用作检查点并重新启动时,某些共享库区域可能是 WPAR的本地区域。 在这种情况下, WPAR 的名称显示在区域 myarea@mywpar的名称之后。 在所有其他情况下,该区域在系统范围内; 因此会省略 WPAR 名称。

XML 报告生成

-X 标志生成名为 RootString.etm 的 XML 报告文件。 该文件可以在虚拟性能分析器中显示。 XML 报告文件包含四个部分:
  • 概要文件一般信息
  • 符号数据
  • 概要文件层次结构
  • 临时数据

-X 用于在自动脱机方式下直接生成 XML 报告。

-X 还可以用于在手动脱机方式下从 RootString.symsRootString.trc 文件生成 XML 报告。

如果指定 -X timedata,那么生成的 XML 报告将包含时间数据信息。 缺省情况下关闭时间数据生成功能。

要指定时间数据的存储区数,使用 buckets=N 自变量。 缺省的存储区数为 1800。

大页分析

tprof -a 命令从典型应用程序运行中收集概要文件跟踪信息,并产生性能投影。 这些投影会将应用程序数据空间的不同部分映射到不同的页大小。 当命令将下列任何应用程序内存区域映射到不同页大小时,大页分析会使用跟踪中的信息来投影转换缓冲区性能:
  • 静态应用程序数据(已初始化或未初始化的数据)
  • 应用程序堆(已动态分配的数据)
  • 堆栈
  • 应用程序文本
为操作系统支持的每种页大小提供了性能投影。 第一个性能投影是基线投影,将所有内存区域映射到缺省的 4 KB 页大小。 后续投影一次将一个区域映射到不同的页大小。 每个投影均报告下列统计信息:
  • 页大小
  • 支持所有区域所需的页数
  • 转换未命中评分
  • 冷转换未命中评分
摘要部分列出了进行概要分析的进程及报告的统计信息。 它包括以下信息:
  • 内存引用的百分比
  • 建模内存引用
  • 内存分配调用
  • 可用调用

数据概要分析

tprof -b 命令打开基本数据概要分析并收集数据访问信息。 摘要部分报告每个进程的内核数据、库数据、用户全局数据和堆栈堆部分的访问信息。

如果指定 -b 标志以及 -s-u-k-e 标志,那么 tprof 命令数据概要分析报告共享库、二进制、内核和内核扩展中的最常用数据结构(导出的数据符号)。 -b 标志还报告使用那些数据结构的函数。

tprof 与 prof 和 gprof 的比较

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

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

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

tprof 收集整个系统的处理器使用情况信息,而 profgprof 只收集单个程序以用户方式花费的时间内的概要分析信息。tprof 还提供概要分析的用户程序执行期间所有活动进程以及完全支持库和内核方式概要分析的摘要。

tprof 支持对 Java 应用程序进行概要分析,但 profgprof 不支持。

标志

描述
-@ { ALL | wparlist } 在生成的报告中包含 WPAR 信息。

ALL 选项包含所有 WPAR的摘要。 设置此选项后,报告将包含 "SYSTEM" 报告以及跟踪的每个 WPAR 的报告。

wparlist 选项指定 WPAR的逗号分隔列表。 设置 wparlist 选项时, tprof 命令将为指定的每个 WPAR 生成一个报告。

-a 打开大页分析。
- A { all | cpulist } 打开自动脱机方式。 没有任何自变量关闭每个处理器跟踪。 all 启用所有处理器的跟踪。 cpulist 是要跟踪的处理器标识的逗号分隔列表。
-b 打开基本数据概要分析。
-B 使用有关指令地址映射函数的信息来打开基本数据概要分析。
-c 打开 cooked 文件的生成。
-C all | cpulist 打开每个处理器概要分析。 指定 all 以生成所有处理器的概要分析报告。 如果您给出 cpulist,处理器号应该用逗号分隔(例如,0,1,2)。
注: 仅当每个处理器的跟踪处于开启状态 (在自动脱机方式下) 或已使用 (在手动脱机方式下) 时,才可能进行每个处理器的概要分析。 而在在线方式下,那么完全不可能。 如果所跟踪的 CPU 数大于 128,那么此选项不受支持。
-d 打开延时跟踪方式,该方式延时数据收集直到 trcon 被调用为止。
-D 打开详细信息概要分析,该概要分析按照每个子例程下面的指令偏移量显示处理器使用情况。
-e 打开内核扩展概要分析功能。
-E [ 方式 ] 启用基于事件的概要分析。 可能的方式为:
PM_事件
将硬件事件指定到概要文件。 如果没有对 -E 标志指定方式,那么缺省事件是处理器周期(PM_CYC)。
EMULATION
启用模拟概要分析方式。
ALIGNMENT
启用对齐概要分析方式。
ISLBMISS
启用指令段后备缓冲区不命中概要分析方式。
DSLBMISS
启用数据段后备缓冲区不命中概要分析方式。
-f 频率 指定采样频率。 对于处理器周期和 EMULATIONALIGNMENTISLBMISS 以及 DSLBMISS 事件,采样频率范围可介于 1 至 500 毫秒,对于其他性能监视器事件,采样频率范围可介于 10000 至 MAXINT 次数。 如果指定 -f 标志和 -y 标志,那么对于其他性能监视器事件,采样频率的值范围介于 1 至 MAXINT 次数,缺省值为 10000 个事件。
-f 覆盖 cooked 文件(如果存在)。 如果没有用 -x 标志使用的话,那么强制使用人工脱机方式。
-g 不要将符号名称转换为人们可阅读的名称。
-g 设置跟踪处理开始日期和结束日期。 这些参数以以下格式指定:
"start=mmddhhmmssyy,end=mmddhhmmssyy"
其中mmddhhmmssyy分别是月,日,小时,分钟,秒和年。 该选项接受以下值:
开始
当设置此项时,跟踪处理从指定的开始字符串开始。
结束
当设置此项时,跟踪处理在指定的结束字符串停止。
-I 打开二进制指令收集。
注: 在自动脱机方式下生成符号文件或熟符号文件时, -I 标志会激活以收集二进制指令。 然而,在人工脱机方式下,-I 标志不会影响报告文件。
-j 开启 Java 类和方法概要分析。
-k 启用内核概要分析功能。
-l 启用长文件名报告。 缺省情况下,如果子程序、程序和源文件名不适合概要分析报告中的可用空间,那么 tprof 截断这些名称。 该标志禁用截取。
-L 对象列表 对使用逗号分隔列表 objectlist 指定的对象启用列表注释功能。 可执行程序以及共享库可以给它们的列表文件加上注释。 请为库指定归档名。
注意:
  1. 要启用程序的列表注释,必须开启用户方式概要分析 (-u)。
  2. 要启用共享库的列表注释,必须开启共享库概要分析 (-s)。
  3. 要注释使用 IPA 编译生成的列表,请指定 a.lst 作为 objectlist
-m 对象列表 对使用逗号分隔列表 objectlist 指定的对象启用微概要分析功能。 可执行文件、共享库以及内核扩展都可进行微概要分析。 给库和内核扩展指定归档名。
注意:
  1. 要启用程序的微概要分析功能,必须打开用户方式概要分析功能(-u)。
  2. 要启用共享库的微概要分析功能,必须打开共享库概要分析功能(-s)。
  3. 要启用内核扩展例程微概要分析功能,必须打开内核扩展例程概要分析功能(-e)。
-M PathList 指定源路径列表。 PathList 是一个以冒号分隔的路径列表,在这些路径中搜索微概要分析 和列表注释所需的源文件和 .lst 文件。

缺省情况下,源路径列表是对象搜索路径列表。

-n 关闭后处理。 如果指定 -n 标志,将忽略 -u-s -k-e-j 标志。 数据已经收集,.trc 文件和 gensyms 文件已经生成,但是尚未生成 .prof 文件。 这帮助避免在基准程序期间重载系统,例如。 如果使用 -n 选项,就必须使用 -A 标志。
-N 打开源行号信息收集。

在自动脱机方式下生成符号文件或 cooked 符号文件时,-N 标志会激活以收集源行信息。 然而,在人工脱机方式下,-N 标志不会影响报告文件。

-O 该选项接受以下值:
showaddrbytes=[on|off]
开启AddressBytes子例程报告中的列。 缺省值为 off
‘wrapfname=[on|off]
开启长函数名切行。 要将函数名保持为一行,请将值设置为 -l。 缺省值为 off
pdetails=[on|off]
对报告启用数据合并进程。 报告将合并指定的数据processlist在报告的 "进程摘要" 部分的 kernelsharedlib 段中。
-p 进程列表 processlist 中指定的进程启用进程级概要分析功能。 processlist 是一个逗号分隔的进程名列表

只有至少打开了一种概要分析方式(-u-s-k-e-j)时,才会启用进程级概要分析功能。

- P { all | PIDList } 启用遇到的所有进程或 PIDList 指定进程的进程级概要分析功能。 PIDList 是一个逗号分隔的进程标识列表。

只有至少打开了一种概要分析方式(-u-s-k-e-j)时,才会启用进程级概要分析功能。

-r 根字符串 指定 rootstring.tprof 输入并报告所有具有 rootstring.suffix 格式名称的文件。

如果未指定 -r 标志,那么 rootstring 参数将使用 -x 标志所指定的缺省程序名。

-R 指定 tprof 命令应使用由 PURR 增量值加权的样本来计算百分比。 这是在同时多线程 或微分区®环境中运行时的首选模式。

-R 标志不能与 -z 标志或 -Z 标志一起使用。

-s 启用共享库概要分析功能。
-S PathList 指定对象搜索 PathListPathList 是一个用冒号分隔的路径列表,搜索该列表以查找可执行文件、共享库和内核扩展。

缺省对象搜索 PathList 是环境路径列表($PATH)。

-t 启用线程级概要分析功能。

如果 -p-P 没有带 -t 标志一起指定,那么 -t 等价于 -P all -t。 否则,为选定的进程启用线程级报告。 仅当至少有一个概要分析方式(-u-s -k-e-j)启用时,线程级概要分析才启用。

-T 缓冲区大小 指定跟踪 buffersize

该标志表示仅在实时方式或自动脱机方式下有效。

-U 启用用户方式概要分析功能。
-v 启用详细方式。
-V 文件 将详细输出存储在指定的 File 中。
-x 程序 指定将由 tprof 执行的程序。 当 程序 完成或使用 trcofftrcstop 手动停止 跟踪 时,数据收集停止

-x 标志必须是在 tprof 中指定的标志列表中的最后一个标志。

-X 指定 tprof 命令在 tprof 概要分析结束时调用 XML 生成器,并直接从 tprof tracesymlib 数据生成 XML 报告。

-X 选项需要 Java。 首先安装 Java ,并确保 Java 在 PATH 中。

-y 仅对指定的命令及其后代打开基于事件的概要分析功能。
-z 打开滴答报告。 用先前版本的 tprof 来启用兼容方式。 缺省情况下只以百分比的形式报告处理器使用情况。 当使用 -z 时,tprof 也报告滴答数。 该标志还在子例程报告中添加“地址”栏和“字节”栏。

如果指定 -z 标志和 -a 标志,那么报告中的进程摘要部分将显示数字而不是百分比。

-Z 切换报告以使用记号而不是百分比 (与 -z 标志相同) ,并将带注释的列表 (与 -L 标志一起使用时) 和带注释的源文件 (与 -m 标志一起使用时) 拆分为多个文件,每个子例程一个。

该选项打开 -g 标志。

安全性

RBAC 用户和 Trusted AIX 用户注意:该命令可执行特权操作。 只有特权用户才能执行特权限定的操作。 有关权限与特权的更多信息,请参阅安全性中的“特权限定的命令数据库”。 有关与该命令相关联的特权和权限的列表,请参阅 lssecattr 命令或 getcmdattr 子命令。

示例

  1. 以下示例显示了基本全局程序和线程级摘要:
    $tprof -x sleep 10 

    将显示类似如下的输出:

    Mon May 21 00:39:26 2012 System: AIX 6.1 Node: dreaming Machine: 000671894C00 
    Starting Command sleep 10 
    stopping trace collection. 
    Generating sleep.prof 

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

  2. 以下示例显示了具有所有选项的全局概要分析:
    $tprof -skeuj -x sleep 10 

    将显示类似如下的输出:

    Mon May 21 00:39:26 2012 
    System: AIX 6.1 Node: drea
    ming Machine: 000671894C00 
    Starting Command sleep 10 
    stopping trace collection.
    Generating sleep.prof 

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

  3. 以下示例显示了单进程级概要分析:
    $tprof -u -p workload -x workload 

    将显示类似如下的输出:

    Mon May 21 00:39:26 2012 
    System: AIX 6.1 Node: drea
    ming Machine: 000671894C00 
    Starting Command workload stopping trace collection. 
    Generating workload.prof 

    生成的 workload.prof 文件包含摘要报告、全局用户方式概要文件部分以及进程“workload”的一个进程级概要文件部分(仅包含用户方式概要文件子节)。

  4. 以下示例显示了多进程级概要分析:
    $tprof -se -p send,receive -x startall 

    将显示类似如下的输出:

    Mon May 21 00:39:26 2012 
    System: AIX 6.1 Node: drea
    ming Machine: 000671894C00 
    Starting Command startall 
    stopping trace collection. 
    Generating startall.prof

    生成的 startall.prof 文件包含摘要报告、全局共享库方式概要文件、全局内核扩展概要文件部分以及两个进程级概要文件部分:一个用于进程“send”,一个用于进程“receive”。 每个进程级部分包含两个子部分:一个为共享库概要分析信息,一个为内核扩展概要分析信息。

  5. 以下示例显示了微概要分析和列表注释:
    $tprof -m ./tcalc -L ./tcalc -u -x ./tcalc 

    将显示类似如下的输出:

    Mon May 21 00:39:26 2012 
    System: AIX 6.1 Node: drea
    ming Machine: 000671894C00 
    Starting Command ./tcalc 
    stopping trace collection. 
    Generating tcalc.prof 
    Generating tcalc.tcalc.c.mprof
    Generating tcalc.tcalc.c.alst

    生成的 tcalc.prof 文件包含摘要报告和全局用户方式概要文件部分。 生成的 tcalc.tcalc.c.mproftcalc.tcalc.c.alst 文件包含微型概要分析报告和带注释的列表。

  6. 要对处理器周期执行基于事件的概要分析(每 100 毫秒采样一次),请输入以下命令:
    $tprof -E -f 100 -Askex sleep 10

    将显示类似如下的输出:

    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 26 14:44:02 2005
    System: AIX 5.3 Node: bigdomino Machine: 00C0046A4C00
    Generating sleep.trc
    Generating sleep.prof
    Generating sleep.syms
  7. 对于有关已完成指令的基于事件的概要分析,每完成 20,000 个指令采样一次,请输入以下命令:
    $tprof -E PM_INST_CMPL -f 20000 -Askex sleep 10

    将显示类似如下的输出:

    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 26 14:42:44 2005
    System: AIX 5.3 Node: bigdomino Machine: 00C0046A4C00
    Generating sleep.trc
    Generating sleep.prof
    Generating sleep.syms
  8. 要对仿真中断执行基于事件的概要分析(每 10000 个事件采样一次),请输入以下命令:
    $tprof -E EMULATION -Askex sleep 10

    将显示类似如下的输出:

    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 26 14:41:44 2005
    System: AIX 5.3 Node: bigdomino Machine: 00C0046A4C00
    Generating sleep.trc
    Generating sleep.prof
    Generating sleep.syms
  9. 以下示例显示了自动脱机方式:
    $tprof -c -A all -x sleep 10 

    将显示类似如下的输出:

    Starting Command sleep 10 
    stopping trace collection. 
    Mon May 21 00:39:26 2012 
    System: AIX 6.1 Node: drea
    ming Machine: 000671894C00 
    Generating sleep.ctrc 
    Generating sleep.csyms 
    Generating sleep.prof 

    生成的 sleep.prof 文件只有一个摘要报告部分,而两个 cooked 文件可供随时进行重新后处理。

  10. 以下示例显示了对源行收集功能进行启用的自动脱机方式:
    $tprof -A -N -x sleep 10 

    将显示类似如下的输出:

    Starting Command sleep 10
    stopping trace collection.
    Wed Feb 8 15:12:41 2006
    System: AIX 5.3 Node: aixperformance Machine: 000F9F3D4C00
    Generating sleep.trc
    Generating sleep.prof
    Generating sleep.syms
    生成的 sleep.prof 文件仅包含摘要报告部分,而 sleep.syms 包含源行信息。
  11. 以下示例显示了对源行和指令收集功能进行启用的自动脱机方式:
    $tprof -A -N -I -r RootString -x sleep 10 

    将显示类似如下的输出:

    Starting Command sleep 10
    stopping  trace collection.
    Wed Feb  8 15:16:37 2006
    System: AIX 5.3 Node: aixperformance Machine: 000F9F3D4C00
    Generating RootString.trc
    Generating RootString.prof
    Generating RootString.syms
    将生成 rootstring.prof 文件。 rootstring.syms 文件包含源行信息和二进制指令。
  12. 启用 Java 源代码行和指令收集 对于以实时方式在 Java 5 JVM 上运行的应用程序 HelloAIX ,请输入以下命令:
    $tprof -N -I -x java -Xrunjpa:source=1,instructions=1 Hello AIX 

    将显示类似如下的输出:

    Thu Feb  9 13:30:38 2006
    System: AIX 5.3 Node: perftdev Machine: 00CEBB4A4C00
    Starting Command java -Xrunvpn_jpa:source=1,instructions=1 Hello AIX
    Hello AIX!
    stopping trace collection.
    Generating java.prof
    将生成 java.prof 文件。 它包含 JIT 源行信息和 JIT 指令。
  13. 以下示例显示了 vloop_lib_32 程序的处理器使用情况,该程序不带任何共享库、线程级概要分析、每个处理器的跟踪或后期处理:
    $tprof -A -n -s -t -r test -x vloop_lib_32 5

    将显示类似如下的输出:

    Starting Command vloop_lib_32 5
    stopping trace collection.
    Generating test.trc
    Generating test.syms
  14. 以下是 XML 报告的自动脱机方式的示例:
    $tprof -A -X -r RootString -x sleep 10
    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 17 22:00:24 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    Generating sleep.trc
    Generating sleep.syms
    Calling tprof2xml to generate XML report.
    tprof2xml TraceReader Version 1.2.0
    Tue Apr 17 22:00:24 2007
    System: AIX 6.1 Node: test105 Machine: 00CEBB4A4C00
     ------------------0------------------
    Record 0
    Post-processing counters
    Retrieving Disassembly
    writing the XML
    Writing symbol list
    .
    Writing process hierarchy
    Finished writing sleep.etm
  15. 以下是自动脱机方式启用源行和指令收集的示例:
    $tprof -A -N -I -X -x sleep 10
    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 17 22:00:24 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    Generating sleep.trc
    Generating sleep.syms
    Calling tprof2xml to generate XML report.
    tprof2xml TraceReader Version 1.2.0
    Tue Apr 17 22:00:24 2007
    System: AIX 6.1 Node: test105 Machine: 00CEBB4A4C00
    ------------------0------------------
    Record 0
    Post-processing counters
    Retrieving Disassembly
    writing the XML
    Writing symbol list
    .
    Writing process hierarchy
    Finished writing sleep.etm
    The symbol data elements in the xml report will have both bytes and
    LineNumberList child elements.
  16. 以下是启用时间数据的 XML 报告的自动脱机方式的示例:
    $tprof -A -X timedata,buckets=100 -x sleep 10
    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 17 22:18:06 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    Generating RootString.trc
    Generating RootString.syms
    Calling tprof2xml to generate XML report.
    tprof2xml TraceReader Version 1.2.0
    Tue Apr 17 22:18:06 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    Tue Apr 17 22:18:06 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    ------------------0------------------
    Record 0
    Post-processing counters
    Retrieving Disassembly
    writing the XML
    Writing symbol list
    .
    Writing process hierarchy
    Finished writing RootString.etm
    The RootString.etm will have bucket elements in each object of the profile
    hierachy.
  17. 以下是 XML 报告的手动脱机方式的示例:
    $tprof -A -x sleep 10
    Starting Command sleep 10
    stopping trace collection.
    Tue Apr 17 22:28:01 2007
    System: AIX 5.3 Node: test105 Machine: 00CEBB4A4C00
    Generating sleep.trc
    Generating sleep.prof
    Generating sleep.syms
    要运行 tprof 以使用 sleep.trcsleep.syms 来生成 XML 报告,输入以下内容以指定 -r sleep 生成 XMLl 报告:
    $tprof -X -r sleep
    Calling tprof2xml to generate XML report.
    tprof2xml TraceReader Version 1.2.0
    Tue Apr 17 22:28:01 2007
    System: AIX 6.1 Node: test105 Machine: 00CEBB4A4C00
    ------------------0------------------
    Record 0
    Post-processing counters
    Retrieving Disassembly
    writing the XML
    Writing symbol list
    .
    Writing process hierarchy
    Finished writing sleep.etm
  18. 要对工作负载及其后代执行大页分析,请输入以下命令:
    $tprof -a -y workload
    将显示类似如下的输出:
    Starting Command workload
    stopping trace collection.
    Tue Apr 26 14:42:44 2005
    System: AIX 5.3 Node: bigdomino Machine: 00C0046A4C00
    Generating workload.trc
    Generating workload.prof
    Generating workload.syms
  19. 要仅对指定的程序 workload 及其后代进行概要分析,请输入以下命令:
    $tprof -E PM_MRK_LSU_FIN -f 20000 -Aske -y workload
    将显示类似如下的输出:
    Starting Command workload
    stopping trace collection.
    Tue Apr 26 16:42:44 2005
    System: AIX 5.3 Node: bigdomino Machine: 00C0046A4C00
    Generating workload.trc
    Generating workload.prof
    Generating workload.syms
  20. 要为在 Java 6 JVM 上以实时模式运行的应用程序AIX启用 Java 源行和指令收集功能,请输入以下命令:
    $ tprof -N -I -x java -agentlib:jpa=source=1,instructions=1 Hello AIX
    注: 使用 64 位 JDK 时,请按以下格式输入 -agentlib:jpa64 命令而不是 -agentlib:jpa :
    $ tprof -N -I -x java -agentlib:jpa64=source=1,instructions=1 Hello AIX
    将显示类似如下的输出:
    Fri May 30 04:16:27 2008
    System: AIX 6.1 Node: toolbox2 Machine: 00CBA6FE4C00
    Starting Command java -agentlib:jpa=source=1,instructions=1 Hello AIX
    Hello AIX!
    stopping trace collection.
    Generating java.prof

    将生成 java.prof 文件。 它包含 JIT 源行信息和 JIT 指令。

  21. 要通过 -O showaddrbytes=on 标记在报告中显示地址字节信息,请输入以下命令:
    $ tprof  -O showaddrbytes=on -x sleep 5
    
    将会显示类似如下示例的报告:
    
    Subroutine                        %   Source                Address  Bytes 
    ==========                     ====== ======                =======  ===== 
    h_cede_end_point                98.47 hcalls.s               111bfc     14 
    
    Sample report without -O showaddrbytes=on option 
    
    Subroutine                        %   Source                      
    ==========                     ====== ======         
    h_cede_end_point                98.47 hcalls.s    
  22. 要通过 -G 选项显示 02/18/2016 02:30:30 和 02/18/2016 02:35:30 之间的跟踪数据处理,请输入以下命令:
    $tprof  -G “start=021802303016,end=021802353016” -r sleep
    
    要处理从 02/18/2016 02:30:30 开始到结束为止的跟踪数据,请输入以下命令:
    
    $tprof -G “start= 021802303016” -r sleep
    要处理从开始直到 02/18/2016 02:35:30 的跟踪数据,请输入以下命令:
    $tprof -G “end=021802303517” -r sleep
  23. 在以下示例中,函数名称为
    Test::abcdefghijklmnoprstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
    . 要显示如何使用 -O wrapfname=on 选项将长函数名换行,请输入以下命令:
    $tprof -ukesl -O wrapfname=on -x sleep 5
    
    The following is a sample report: 
    .Test::abcdefghijklmnoprstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVW
    XYZ123456789							215  19.40 test. C
    以下是未使用 -O wrapfname=on 选项的样本报告:
    Test::abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789_0abcdefghijk 
    lmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890(int,int)  215  19.40 test. C

消息

如果您的系统显示如下消息:

/dev/systrace: device busy or trcon: TRCON:no such device

这表示 trace 工具正在使用。 停止程序并在输入后重试trcstop,停止跟踪。