如果要收集任何种类的跟踪数据,则必须在运行程序之前预装入收集器库 libcollector.so,因为该库提供了能使数据收集发生的真正函数的包装。此外,收集器还将包装函数添加到其他系统库调用中,以保证性能数据的完整性。如果未预装入收集器库,则不能插入这些包装函数。有关收集器如何插入系统库函数的更多信息,请参见使用系统库。
要预装入 libcollector.so,必须使用环境变量同时设置库的名称和库的路径,如下表中所示。使用环境变量 LD_PRELOAD 设置库的名称。使用环境变量 LD_LIBRARY_PATH、LD_LIBRARY_PATH_32 或 LD_LIBRARY_PATH_64 设置库的路径。如果未定义 _32 和 _64 变量,则使用 LD_LIBRARY_PATH。如果已经定义了这些环境变量,则向其中添加新值。
表 3–2 用来预装入 libcollector.so 库的环境变量设置
环境变量 |
值 |
---|---|
LD_PRELOAD |
libcollector.so |
LD_LIBRARY_PATH |
/opt/SUNWspro/prod/lib/dbxruntime |
LD_LIBRARY_PATH_32 |
/opt/SUNWspro/prod/lib/dbxruntime |
LD_LIBRARY_PATH_64 |
/opt/SUNWspro/prod/lib/v9/dbxruntime |
LD_LIBRARY_PATH_64 |
/opt/SUNWspro/prod/lib/amd64/dbxruntime |
如果 Sun Studio 软件未安装在 /opt/SUNWspro 中,请向系统管理员咨询正确的路径。可以在 LD_PRELOAD 中设置全路径,但是,当使用 SPARC V9 64 位体系结构时,这样做会使问题复杂化。
运行后删除 LD_PRELOAD 和 LD_LIBRARY_PATH 设置,以便它们对于从同一个 shell 启动的其他程序无效。
如果要从已在运行的 MPI 程序收集数据,则必须将一个单独的 dbx 实例附加到每个进程并针对每个进程启用收集器。在将 dbx 附加到 MPI 作业中的多个进程时,每个进程将被停止并在不同的时间重新启动。时间差异可能会更改 MPI 进程间的交互并影响所收集的性能数据。为了使该问题带来的影响最小,一种解决方案是使用 pstop(1) 命令停止所有进程。但是,在将 dbx 附加到这些进程后,必须从 dbx 重新启动这些进程,重新启动进程时会发生时间延迟,这会影响 MPI 进程的同步。另请参见从 MPI 程序收集数据。