如果怀疑实验中缺少某些分析数据,请检查下列解释数据缺少原因的主题列表。
如果您的程序为多线程程序,则一个或多个 LWP 的基于时钟的分析信号 (SIGPROF) 有时会丢失。后果就是数据中不包括在这些 LWP 上所运行线程的计时度量。这种情况大多发生在 SolarisTM 7 操作环境下的未绑定线程中。
此问题可以通过在 Solaris 操作环境中安装相应的补丁程序进行修复。另一种选择是使用绑定线程,或者如果您当前运行在 Solaris 8 操作环境下,可使用 /usr/lib/lwp 中的替代线程库。
如果您的程序为多线程程序,则硬件计数器上溢分析信号 (SIGEMT) 有时会丢失。将记录上溢的数据并将其分配给函数 collector_lost_hwc_overflow。
此问题可以通过在 Solaris 操作环境中安装相应的补丁程序进行修复。如果您当前正运行于 Solaris 8 操作环境下,另一种解决方法是使用 /usr/lib/lwp 中的替代线程库。
收集器的分析数据收集机制使用了两个信号,SIGPROF 和 SIGEMT。为了确保不丢失或误处理分析信号,收集器将自己的信号处理程序安装为主信号处理程序。如果即将在其上收集数据的程序安装了自己的信号处理程序,收集器会将其信号处理程序重新安装为主信号处理程序。
如果您没预先加载收集器库就将 dbx 连接到某个进程并启用了性能数据收集,则即使程序随后安装了自己的信号处理程序,收集器也不会重新安装它的信号处理程序。在这种情况下,为了不丢失性能数据,程序的信号处理程序必须确保传递 SIGPROF 和 SIGEMT 信号。如果您的应用程序载入异步 I/O 库 libaio.so,在将 dbx 附加到用于数据收集的进程中后,SIGPROF 信号将被 libaio.so 中的信号处理程序截取,并且不记录基于时钟的数据和抽样数据。
如果您的程序成功调用 exec(2) 或其任一变体,则性能实验将被异常终止,并且不再记录数据。如果调用失败,则数据收集照常进行。如果在 dbx 下运行此程序,则在成功调用 exec 之后不能收集数据,但是如果您使用 collect(1) 命令收集数据,则可以使用 -F on 选项记录新图像上的实验。
异常终止的实验可由性能分析器成功读取。如果要在记录实验时所在计算机以外的一台不同计算机上分析此实验,请首先在记录该实验的计算机上使用 er_archive(1) 命令。
当系统时钟与外部源同步时,基于时钟的分析数据看起来好像丢失。通常在几秒时间内以增量的方式进行调整。此时间段内在概要数据包中记录的时间戳包括系统时钟的增量。在 [时间线] 标签中可以看到明显分析间隔中的合成不规则,但并不影响计时度量。