Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

记录实验

    您可以按三种不同的方式记录用户模式目标上的实验:

  • 使用 collect 命令

  • 使用 dbx 创建进程

  • 使用 dbx 从正在运行的进程创建实验

性能分析器中的 "Profile Application"(分析应用程序)对话框可运行 collect 实验。

collect 实验

使用 collect 命令记录实验时,collect 实用程序会创建实验目录,并设置 LD_PRELOAD 环境变量,以确保将 libcollector.so 及其他 libcollector 模块预装入到目标的地址空间中。然后,该 collect 实用程序设置环境变量,将实验名称和数据收集选项通知 libcollector.so,并执行自己顶部的目标。

libcollector.so 及其相关模块负责写入所有实验文件。

创建进程的 dbx 实验

在启用数据收集的情况下使用 dbx 启动进程时,dbx 还会创建实验目录,并确保预装入 libcollector.so。然后 dbx 在其第一个指令前的断点处停止进程,并调用 libcollector.so 中的初始化例程以启动数据收集。

Java 实验不能由 dbx 收集,因为 dbx 使用 Java 虚拟机调试接口 (Java Virtual Machine Debug Interface, JVMDI) 代理进行调试,而该代理无法与数据收集所需的 Java 虚拟机工具接口 (Java Virtual Machine Tools Interface, JVMTI) 代理共存。

正在运行的进程上的 dbx 实验

在正在运行的进程上使用 dbx 启动实验时,dbx 会创建实验目录,但不能使用 LD_PRELOAD 环境变量。dbx 对目标进行交互式函数调用以打开 libcollector.so,然后调用 libcollector.so 初始化例程,就像它创建进程时那样。与 collect 实验中一样,数据由 libcollector.so 及其模块写入。

由于进程启动时 libcollector.so 不在目标地址空间中,因此依赖于插入用户可调用函数(同步跟踪、堆跟踪、MPI 跟踪)的所有数据收集可能都不起作用。通常,符号已经解析为底层函数,因此无法发生插入。此外,以下子孙进程也取决于插入,对于 dbx 在正在运行的进程上创建的实验无法正常工作。

如果在使用 dbx 启动进程之前或者在使 dbx 附加到正在运行的进程之前已显式预装入 libcollector.so,可以收集跟踪数据。