Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

实验控制选项

这些选项控制如何收集实验数据。

使用 -L size 限制实验大小

将所记录的分析数据量限制在 size 兆字节。 该限制适用于所有分析数据量和跟踪数据量之和,但不适用于抽样点。该限制只是近似值,可以被超出。

当达到该限制时,不再记录分析和跟踪数据,但实验会一直保持打开状态,直到目标进程终止。如果启用了定期抽样,则会继续写入抽样点。

size 的允许值包括:

unlimitednone

不对实验强加大小限制。

n

强加 n MB 限制。n 的值必须为正数(大于零)。

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

例如,要将限制确定为约 2 GB,请指定 –L 2000

使用 -F option 跟踪进程

控制子孙进程是否应记录数据。 始终会收集创建者进程的数据,这和 –F 设置无关。option 的允许值包括:

on

针对所有子孙进程记录实验。

all

on 相同。

off

不针对任何子孙进程记录实验。

=regex

针对可执行文件名称与正则表达式匹配的子孙进程记录实验。仅使用可执行文件的基名而不是完整路径。如果您使用的 regex 包含空白或 shell 解释的字符,请务必将整个 regex 参数括在单引号内。

缺省情况下设置 -F on 选项,这样收集器将跟踪通过调用函数 fork(2)、fork1(2)、fork(3F)、vfork(2) 和 exec(2) 及其变体而创建的进程。对 vfork 的调用已在内部被替换为对 fork1 的调用。

还将跟踪通过调用 system(3C)、system(3F)、sh(3F)、posix_spawn(3p)、posix_spawnp(3p) 和 popen(3C) 以及类似函数而创建的子孙进程以及与其相关的子孙进程。

在 Linux 上,缺省情况下将跟踪由不带 CLONE_VM 标志的 clone(2) 创建的子孙进程。使用 CLONE_VM 标志创建的子孙进程被视为例程而不是进程,会始终跟踪,与 –F 设置无关。

如果指定 –F '= regexp ' 选项,收集器将跟踪所有子孙进程。当子孙进程的名称或子实验的名称与指定的正则表达式匹配时,收集器将创建子实验。有关正则表达式的信息,请参见 regexp(5) 手册页。

使用正则表达式的示例:

  • 要针对创建者进程中第一个系统调用的第一个 fork 的第一个 exec 的子孙进程捕获数据,请使用: collect -F '=_x1_f1_x1'

  • 要捕获 exec 而不是 fork 的所有变体的数据,请使用:collect -F '=.*_x[0-9]/*'

  • 要捕获系统 ("echo hello") 而非系统 ("goodbye") 调用的数据,请使用:collect -F '=echo hello'

有关如何创建和命名子孙进程的实验的更多信息,请参见子实验

对于 MPI 实验,缺省情况下还跟踪子孙进程。

读取创建者实验时,性能分析器和 er_print 实用程序将自动读取子孙进程的实验,并在数据显示中显示子孙进程。

要从命令行选择用于显示的特定子实验的数据,请将子实验路径名显式指定为 er_printanalyzer 命令的参数。所指定的路径必须包含创建者实验的名称以及创建者目录中子孙实验的名称。

例如,要查看 test.1.er 实验的第三个 fork 的数据:

er_print test.1.er/_f3.er

analyzer test.1.er/_f3.er

或者,可以使用感兴趣的子孙实验的显式名称来准备实验组文件。有关更多信息,请参见实验组


注 -  如果正在跟踪子孙进程时创建者进程退出,将继续从仍然在运行的子孙进程中收集数据。创建者实验目录会相应地继续变大。

您还可以收集脚本上的数据并跟踪脚本的子孙进程。有关更多信息,请参见从脚本收集数据

使用 -j option 分析 Java

当目标程序是 JVM 时,启用 Java 分析。option 的允许值包括:

on

记录 JVM 计算机的分析数据,并识别 Java HotSpot 虚拟机编译的方法以及记录 Java 调用堆栈。

off

不记录 Java 分析数据。

path

记录 JVM 的分析数据并使用安装在指定 path 中的 JVM。

如果目标是 JVM 计算机,必须使用 –j on 才能获取分析数据。

如果您要收集 .class 文件或 .jar 文件中的数据,则不需要使用 -j on 选项。

如果使用 64 位 JVM 计算机,您必须将其路径显式指定为目标;对于 32 位 JVM 计算机,请勿使用 -d64 选项。如果指定了 -j on 选项,但目标不是 JVM 计算机,可能会向目标传递一个无效参数,且不会记录任何数据。collect 命令将验证为 Java 分析指定的 JVM 计算机的版本。

使用 -J java-argument 传递 Java 选项

指定要传递到用于分析的 JVM 的其他参数。如果指定了 -J 选项,将启用 Java 分析 (–j on)。如果 java-argument 包含多个参数,则必须使用引号将其括起来。它必须包括一组由空格或制表符分隔的令牌。每个令牌作为单独的参数传递给 JVM。JVM 的大多数参数必须以 (-) 短划线字符开头。

使用 -l signal 指定抽样的信号

当名为 signal 的信号传递到进程时,记录抽样包。

可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1SIGUSR2。即使指定时钟分析,也可以使用 SIGPROF。可通过 kill 命令将信号传递到进程。

如果同时使用 –l (小写 L)和 –y 选项,则各选项必须使用不同的信号。

如果您使用该选项而程序具有自己的信号处理程序,则应当确保使用 -l 指定的信号会传递到收集器的信号处理程序,而不是被拦截或忽略。

有关信号的更多信息,请参见 signal(3HEAD) 手册页。

使用 –t duration 设置时间范围

指定数据收集的时间范围。

可以将 duration 指定为单个数字(可以选择添加 ms 后缀)以指示实验在该时间(单位为分钟或秒)终止。缺省情况下,持续时间以秒为单位。也可以将 duration 指定为用连字符分隔的两个数字,这会导致数据收集暂停,直到第一个时间过去。到那时,将开始收集数据。当到达第二个时间时,数据收集终止。如果第二个数字为零,则在初次暂停之后收集数据,直到该程序运行结束。即使该实验已经终止,也允许目标进程运行至结束。

停止分析的目标以允许使用 -x 连接 dbx

exec 系统调用退出时使目标进程保持停止状态,以允许调试器连接到该进程。collect 命令将输出一条含有进程 ID 的消息。

要在 collect 停止调试器之后将其添加到目标,您可以按照下文中的过程进行操作。

  1. 从collect -x命令输出的消息获取进程的 PID。

  2. 启动调试器

  3. 将调试器配置为忽略 SIGPROF;如果您选择收集硬件计数器数据,则配置为忽略 Solaris 上的 SIGEMT 或 Linux 上的 SIGIO

  4. 使用 dbx attach 命令连接到进程。

  5. 为您要收集的实验设置收集器参数

  6. 发出 collector enable 命令。

  7. 发出 cont 命令以允许目标进程运行

由于进程在调试器的控制之下运行,因此收集器会记录一个实验。

或者,您可以连接到进程并使用 collect -P PID 命令收集实验。

使用 -y signal [ ,r] 指定信号暂停和恢复状态

控制对包含名为 signal 的信号的数据的记录。 无论何时将信号传递到进程,它都在暂停状态(在此期间不记录任何数据)和记录状态(在此期间记录数据)之间切换。

缺省情况下,数据收集将在暂停状态下开始。如果指定了可选的 ,r 标志,数据收集将在恢复状态下开始,这表示将立即进行分析。无论 –y 选项的状态如何,都将始终记录抽样点。

暂停-恢复信号的一个用途是在不收集数据的情况下启动一个目标,让其达到稳定状态,然后再启用数据收集。

可以通过全信号名、不带开始的几个字母 SIG 的信号名或信号编号来指定信号。请不要使用程序所使用的信号或会终止执行的信号。建议的信号为 SIGUSR1SIGUSR2。即使指定时钟分析,也可以使用 SIGPROF。可通过 kill 命令将信号传递到进程。

如果同时使用 -l-y 选项,则必须针对每个选项使用不同的信号。

使用 -y 选项时,如果已提供可选的 r 参数,则收集器将在记录状态下启动,否则将在暂停状态下启动。如果未使用 -y 选项,则收集器将在记录状态下启动。

如果您使用该选项而程序具有自己的信号处理程序,则应当确保使用 -y 指定的信号会传递到收集器的信号处理程序,而不是被拦截或忽略。

有关信号的更多信息,请参见 signal(3HEAD) 手册页。