Oracle® Solaris Studio 12.4:性能分析器

退出打印视图

更新时间: 2015 年 1 月
 
 

同步等待跟踪数据

在多线程程序中,同步不同线程执行的任务会导致程序执行延迟。例如,一个线程要访问被其他线程锁定的数据时就不得不等待。这些事件称为同步延迟事件,并通过跟踪对 Solaris 或 pthread 线程函数的调用来收集这些事件。 收集和记录这些事件的过程称为同步等待跟踪。 等待锁花费的时间称为等待时间。

只有等待时间超过阈值(单位为微秒)时,才会记录事件。 阈值为 0 表示跟踪所有的同步延迟事件,而不管等待时间为何。缺省阈值通过运行校准测试确定,在该测试中对线程库的调用不会出现任何同步延迟。 阈值是这些调用的平均时间与某个因子(当前为 6)的乘积。该过程可防止对此类事件进行记录:即等待时间仅在于调用本身,而与实际的延迟无关。因此,数据量会大大减少,但同步事件的计数可能会被明显低估。

对于 Java 程序,同步跟踪包含所分析程序中的 Java 方法调用,但不会跟踪 JVM 中的任何内部同步调用。

同步等待跟踪数据被转换为下表中的度量。

表 2-2  同步等待跟踪度量
度量
定义
同步延迟事件计数。
对等待时间超过指定阈值的同步例程的调用数目。
同步等待时间。
超过指定阈值的等待时间的总和。

通过该信息,您可以确定函数或装入对象对同步例程进行调用时是会经常被阻塞还是会经历很长时间的等待。高同步等待时间表示线程间的争用。您可以通过重新设计算法,尤其是重新组织锁的结构,以便仅包含需要锁定的每个线程的数据来减少争用。