Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

collector(1)

Name

collector - 用于性能数据收集的 dbx 子命令

Synopsis

dbx

Description

术语 collector 用于描述 dbx 中的数据收集功能以及对 libcollector.so 中这些功能的运行时支持。

dbx collector 目前适用于以 Java(TM) 编程语言编写的应用程序。(术语“Java 虚拟机”和 "JVM" 表示用于 Java(TM) 平台的虚拟机。)

collect(1) 手册页中对收集的数据进行了说明。collect 命令可以在不使用 dbx 的情况下收集数据。

dbx 命令

dbx 命令

dbx 可接受用于支持性能数据收集的命令如下所示。

collector { enable | disable }

启用或禁用数据收集。

如果没有进程处于活动状态,则控制在进程启动时是否收集实验。如果模式为 disable,则不会收集性能数据。如果模式为 enable,则会对所有后续运行收集数据。

如果有进程正在运行,但未收集任何实验,且收到了 enable 命令,则会针对运行的进程启动实验。如果指定了 disable 但未收集任何实验,则会忽略该命令并发出警告。

如果有进程正在运行,且在收集一个实验,但收到了 disable 命令,则会终止实验。如果指定了 enable,则会忽略该命令并发出警告。

如果终止了实验,但进程仍在运行,且收到了 enable 命令,则会启动新实验。

collector pause

在实验期间暂停数据记录。如果数据记录已暂停,则会忽略该命令且不发出警告。如果未运行任何实验,则会忽略该命令并发出警告。

collector resume

在实验期间恢复数据记录。如果数据记录未暂停,则会忽略该命令且不发出警告。如果未运行任何实验,则会忽略该命令并发出警告。

collector profile { on | off }

启用或禁用对基于时钟的分析数据的收集。如果实验处于活动状态,将忽略该命令并显示一条警告。缺省值是 "on"。

collector profile timer value

将分析计时器间隔设置为 value。值可以是整数或浮点数,并加上后缀 u 表示微秒值,或加上后缀 m 表示毫秒值。如果不使用后缀,则假定值以毫秒为单位。将缺省间隔设置为 10 毫秒。

也可以将间隔值设置为 "hi" 或 "high" 字符串,表示以 1 毫秒间隔进行分析;设置为 "lo" 或 "low" 字符串,表示以 100 毫秒间隔进行分析;或设置为 "on",表示以 10 毫秒间隔进行分析。这些间隔值是近似值。

如果值小于系统时钟分析最小值,则将其设置为最小值;如果值不是时钟分析精度的倍数,则向下舍入为最接近的时钟分析精度倍数。如果值超过时钟分析最大值,将会报告错误。如果值为负数或零,将会报告错误。

如果实验处于活动状态,将忽略该命令并显示一条警告。

collector hwprofile { on | off }

启用或禁用硬件计数器溢出分析。在硬件或操作系统不支持硬件计数器溢出分析的系统上,在检测到尝试启用该分析时会返回一个错误。如果实验处于活动状态,将忽略该命令并显示一条警告。缺省设置为禁用。

collector hwprofile list

输出用法摘要,其中包含实验的缺省配置。如果处理器支持硬件计数器分析,则输出两个包含硬件计数器相关信息的列表。第一个列表包含“别名”硬件计数器;第二个列表包含原始硬件计数器。在列表之后,会输出芯片的参考手册名称以及为该芯片定义的缺省计数器集。

例如,调用的 collector hwprofile list 命令将生成如下所示的输出:

可用于分析的有别名硬件计数器:

 
cycles[/{0|1}],9999991 (`CPU Cycles', alias for Cycle_cnt; CPU-cycles)
insts[/{0|1}],9999991 (`Instructions Executed', alias for Instr_cnt; events)
icm[/1],100003 (`I$ Misses', alias for IC_miss; events)
...

可用于分析的原始硬件计数器:

 
Cycle_cnt[/{0|1}],1000003 (CPU-cycles)
Instr_cnt[/{0|1}],1000003 (events)
Dispatch0_IC_miss[/0],1000003 (CPU-cycles)
...
collector hwprofile counter ctr_def...[,ctr_n_def]

收集硬件计数器溢出分析。计数器定义数(ctr_defctr_n_def)取决于处理器。例如,在 UltraSPARC III 系统上,最多可以编程两个计数器;在具有超线程的 Intel Pentium 4 上,最多可以使用 18 个计数器。用户可以通过运行不带任何其他参数的 collect -h 命令或发出 collector hwprofile list 命令,确定用于在目标系统上进行分析的最大硬件计数器定义数量,以及可用硬件计数器的完整列表。

可将四个特殊名称用于计数器,on 指定使用芯片的预定义计数器集,hi|high 指定在高精度下使用该集,lo|low 指定在低精度下使用该集,而 off 指定关闭硬件计数器分析。如果使用 hilo 特殊名称,以指定该芯片的缺省计数器集执行高精度或低精度分析,则缺省时钟分析精度也会设置为高精度或低精度。将遵从时钟精度的显式设置。

除了这两个特殊名称,每个计数器定义可以采用下列形式之一,具体取决于处理器是否支持硬件计数器的属性:

  1. [+|-]ctr[/reg#],interval
    
    [+|-]ctr[/reg#] interval

    示例:

    collector hwprofile counter cycles,on,insts
    collector hwprofile counter cycles on insts

    注意:由于历史原因,空格仍可用作硬件计数器之间的分隔符。

  2. [+|-]ctr[~attr=val]...[~attrN=valN][/reg#],interval

    示例

     
    collector hwprofile counter FP_dispatched_fpu_ops~umask=0x3/2,10007
    

    允许跟踪浮点加法和乘法运算。(有关有效属性值的详细信息,请参阅处理器文档)。值 "/2" 指定使用硬件的第二个寄存器执行指令。CPU 周期分析的间隔率为 10007 个事件。

计数器定义选项的含义如下所示:

+|-

可应用于内存相关计数器的可选参数。+ 要求记录数据空间和内存空间分析数据。- 要求不进行记录。

内存相关计数器是指类型为 loadstoreload-store 的计数器;如通过运行不带任何其他参数的 collect -h 命令获取的计数器列表所示。某些这类计数器还带有 precise 标签。

对于 SPARC 或 x86 上的精确计数器,不需要 +;缺省情况下,将记录数据和内存空间数据。- 将关闭数据空间和内存空间数据。

仅对于 SPARC,在非精确内存计数器上指定 + 会导致 collect 回溯,以尝试查找触发溢出的指令以及查找内存引用的虚拟和物理地址。缺省情况下,不会记录此类数据,因此不需要使用 - 来将其关闭。

ctr

特定于处理器的计数器名称。用户可以运行不带任何其他参数的 collect -h 命令来确定计数器名称列表。

attr=val

在某些处理器上,可以将多个属性选项与一个硬件计数器关联。如果处理器支持多个属性选项,则运行不带任何其他参数的 collect -h 会以上面列出的第二种形式指定计数器定义 ctr_def,并提供要用于 attr 的属性名称列表。val 值可以使用十进制或十六进制格式。十六进制格式的数字使用 C 程序格式,其中的数字前置了零和小写 x (0xhex_number)。

reg#

要用于计数器的硬件寄存器。如果未指定寄存器,则 collect 会尝试将计数器放入第一个可用的寄存器,因此,可能由于寄存器冲突而无法放置后续计数器。如果用户指定了多个计数器,则这些计数器必须使用不同的寄存器。可以运行不带任何其他参数的 collect -h 命令来确定允许的寄存器号列表。

interval

抽样频率,通过定义计数器溢出值进行设置。有效值如下:

on

选择缺省比率,该值可通过运行不带任何其他参数的 collect -h 命令来确定。请注意,所有原始计数器的缺省值都是相同的,并且可能不是最合适特定计数器的值。

hi

将间隔设置为 on 的约十分之一长。

lo

将间隔设置为 on 的约 10 倍长。

value

将间隔设置为特定值(以十进制或十六进制格式指定)。

一个实验可以同时指定硬件计数器分析和基于时钟的分析。指定硬件计数器分析在缺省情况下不会禁用基于时钟的分析。

collector hwprofile addcounter ctr_def...[,ctr_n_def]

为硬件计数器溢出分析添加其他计数器。计数器定义数(ctr_defctr_n_def)取决于处理器,如上所述。hwprofile counter 会放弃之前的任何计数器集;hwprofile addcounter 会将新列表附加到旧列表。

collector synctrace { on | off }

启用或禁用同步跟踪数据的收集。缺省值为 off。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector synctrace threshold value

根据给定的 value 设置同步延迟跟踪的阈值;该值可以是下列各项之一:

calibrateon

使用运行时确定的校准阈值。

off

关闭同步延迟跟踪。

n

使用 n 微秒的阈值。如果值为零,则会跟踪所有事件。

缺省设置为 calibrate。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector heaptrace { on | off }

启用或禁用堆跟踪数据的收集。缺省值为 off。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector iotrace { on | off }

启用或禁用 I/O 跟踪数据的收集。缺省值为 off。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector java { on | off }

启用或禁用 Java 数据的收集。缺省值为 off。如果实验处于活动状态,将忽略该命令并显示一条警告。请参见下文的“Java 分析”部分。

collector duration duration

收集指定时长的数据。duration 可以是单个数字(后跟 m 指定分钟或后跟 s 指定秒(缺省值)),也可以是以 - 符号分隔的两个这样的数字。如果指定一个数字,将从开始运行时开始收集直到给定时间;如果指定两个数字,将从第一个时间开始收集数据,到第二个时间结束。如果第二个时间为零,将开始收集数据,直到该程序运行结束。如果指定了两个非零数字,则第一个数字必须小于第二个数字。如果实验处于活动状态,将忽略该命令并显示一条警告。

<collector pausesig signal[ resume]

定义暂停恢复信号;如果添加了可选的 resume,则以已恢复状态启动,否则以已暂停状态启动。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector samplesig signal

定义样例信号。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector mpitrace { on | off }

MPI 跟踪不再受支持。

collector tha { on | all | <option> | off }

控制线程分析器数据的收集。缺省值为 off。如果实验处于活动状态,将忽略该命令并显示一条警告。必须检测目标可执行文件以检测数据争用;有关更多详细信息,请参见 tha(1) 手册页。

<option> 是以逗号分隔的线程分析器数据选项的列表。<option> 的值包括 racedeadlock,这两个值可以单独指定或合并为 deadlock,racerace,deadlock。有关更多信息,请参见 collect (1) 手册页。

collector archive { on | src | used[src] | off }

设置归档实验的模式。缺省值为 on,与正常归档相对应,并会复制目标和在实验中引用的所有共享对象。对于 Java 实验,还会复制所有 .jar 文件。如果将模式设置为 off,则不执行归档。如果将模式设置为 src,还会归档可找到的所有源文件。如果将模式设置为 usedsrc,还会归档在数据中引用以及可找到的所有源文件。如果用户打算将实验移到另一台计算机上,或者从另一台计算机上读取实验,则应当启用对所有装入对象的归档/复制。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector limit value

将记录的分析数据量限制为 value MB。该限制适用于所有分析数据量和跟踪数据量之和,但不适用于抽样点。该限制只是近似值,可以被超出。当达到该限制时,将不再记录分析或跟踪数据,但实验会一直保持打开状态并记录抽样,直到目标进程终止。如果实验处于活动状态,将忽略该命令并显示一条警告。

缺省情况下,记录的数据量不存在限制。

collector status

报告任何打开的实验的状态。

collector show

显示所有收集器控制变量的当前设置。

collector sample { periodic | manual }

将抽样模式设置为 periodic 或 manual。如果指定了 periodic,则会以当前抽样频率记录抽样。如果指定了 manual,则记录定期抽样。无论指定了哪种模式,都可以使用 collector sample record 手动记录抽样。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector sample record [name]

使用可选的标签 name 记录抽样数据。如果实验未处于活动状态,将忽略该命令并显示一条警告。

collector sample period value

将抽样频率设置为 value(秒)。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector dbxsample { on | off }

控制在 dbx 停止目标进程时是否收集抽样。如果指定 on 选项,会在每次 dbx 停止目标进程时收集一次抽样;如果指定 off,则不收集抽样。缺省值为 on。

collector store directory name

将收集器目录设置为 name。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector store experiment name

将输出实验的名称设置为 name。如果实验处于活动状态,将忽略该命令并显示一条警告。如果不指定名称,则使用缺省名称。collect(1)手册页中对缺省名称进行了说明。

collector store group name

将实验组名称设置为 name。如果实验处于活动状态,将忽略该命令并显示一条警告。

collector version

报告将用于收集数据的 libcollector.so 的版本。

help collector

向用户提示可用的多个收集器命令。

已过时的 dbx 命令

已过时的 dbx 命令

dbx 之前接受的一些命令已过时;包括:

collector enable_once

忽略并发出警告。该命令用于仅允许运行数据收集一次。

collector close

如果实验正在运行,则视为 collector disable。如果未运行任何实验,则会忽略并发出警告。

collector quit

如果实验正在运行,则视为 collector disable。如果未运行任何实验,则会忽略并发出警告。

collector address_space { on | off }

不再支持地址空间数据。会忽略该命令并发出警告。

collector store filename name

鉴于兼容性而作为 collector store experiment 接受。将输出实验的名称设置为 name

跟踪子孙进程

跟踪子孙进程

当收集性能数据的进程创建子孙进程时,收集器会继续收集父进程的数据,但以下情况除外:如果进程调用 exec 的任何变量,实验会在 exec 成功时异常终止,而在 exec 失败时继续。在任意一种情况下,实验都可由性能分析工具读取。

如果您要记录子孙进程的数据,则应将 dbx 连接到新建的进程,然后使用 collector enable 对该子孙进程启动实验。如果要手动收集所有子孙进程的数据,请使用 collect(1) 命令。

连接到进程

连接到进程

您还可以将 dbx 连接到某个进程,然后使用收集器命令从其中收集性能数据。

启动可执行文件之后,使用以下命令确定其 PID 并将 dbx 连接到其中

dbx executable-name PID

请务必包括该进程的可执行文件名称。此时,可以启用数据收集。

也可以使用命令

collect -P PID

连接到进程并收集数据。

当连接到调用 dbxcollect -P 的用户之外的其他用户拥有的进程时,必须将想要连接到该进程的用户的 umask 设置为允许拥有该进程的用户写入。如果不正确进行设置,数据收集将会失败,并显示一条消息说明该目录不可写。

如果您从 dbx 启动可执行文件而未启用数据收集,可随时从 dbx 暂停该文件,然后再启用数据收集,但需满足与连接操作相同的限制。

由于 dbx 错误 7077536,在系统调用中暂停的多线程目标上启动收集器可能会导致调用提前返回而不指示错误,且可能会导致不可预知的的行为。

通过连接到安装信号处理程序或使用 libcpc.so 的应用程序来收集数据的方法可能无法正常使用,因为该功能依赖于让用户代码调用收集器在引用的实际例程周围的包装器,而不是调用例程本身。同样,可能也无法收集跟踪数据(同步跟踪、堆跟踪或 MPI 跟踪)或跟踪子孙进程。只有基于时钟的分析和 hwc 分析实验适用于通过 dbx 连接到的进程。针对这些困难的解决方法是,对 collect 使用 -y sig 标志以启动进程,然后通过将指定信号 sig 发送到目标来启用数据收集。

dbx 下的 Java 分析

dbx 下的 Java 分析

要在 dbx 下从头开始分析 Java 应用程序,您应当使用想要运行的 JVM 作为 dbx 的目标,发出 "collector java on" 命令,为您要收集的数据设置分析参数,发出 "collector enable" 命令,然后使用 "run" 命令启动目标。JVM 的任何参数都应使用 run 命令指定,包括 Java 应用程序的类文件或 jar 文件的名称。

要分析运行中的应用程序(无论您在 dbx 下启动它,还是使用 dbx 连接到运行中的 JVM),您应先停止目标(或等待它在断点停止),然后发出 "collector java on" 以及任何分析参数命令,最后发出 "collector enable" 和 "cont"。

要将 collect 与 "-P <PID>" 参数配合使用以连接到具有给定 PID 的 JVM,还应对 collect 命令设置 "-j on"。不能将 "-j" 与 JVM 路径配合使用,也不能使用 "-J" 参数指定 Java 运行时参数。

See also

analyzer (1) 、 collect (1) 、 dbx (1) 、 er_archive (1) 、 er_cp (1) 、 er_export (1) 、 er_mv (1) 、 er_print (1) 、 er_rm (1) 、 tha (1) 、 libcollector (3)

性能分析器手册