为何收集同步等待跟踪数据?
如果某个用 C、C++ 或 Fortran 编写的多线程程序中出现性能问题,则可能是由于同步延迟导致的。收集同步数据有助于识别发生延迟的位置和延迟的时间。
如果您具有记录下来的计时数据并可以看到“用户锁定”度量或“其它等待时间”度量的有效值,这表示您的程序可能会有同步延迟。
收集器如何收集同步等待跟踪数据?
收集器通过在实时例程中插入包装器例程,跟踪线程同步例程调用中的实时延迟。如果延迟超过预先确定的阈值,事件将被记录。每个数据点包含延迟开始和结束的时间戳、处理器 ID、锁定地址、线程 ID 和在延迟结束时运行的 LWP。
在性能分析器中可以看到哪些同步度量?
同步等待跟踪数据将被转换为以下度量:
度量 | 定义 |
---|---|
同步延迟事件计数 | 延迟超出阈值的事件数 |
同步等待时间 | 等待调用同步例程所花费的时间。只有等待时间大于阈值的事件才会被算入此合计中。 |
如何设置延迟阈值?
阈值可以设置为以毫秒为单位的时间值,或通过校准测试确定。在校准测试中,将调用没有任何同步延迟的同步例程。校准的阈值是这些调用的平均时间乘以任意因子。在收集同步数据时,这是缺省选项。
如果您要记录真正延迟的事件,请选择 [校准]。如果您要记录所有同步事件而不考虑延迟时间,请将阈值设置为零。
同步等待跟踪数据收集的限制是什么?
除非已经预装入收集器库 libcollector.so,否则您不能在已经运行的程序中收集同步等待跟踪数据。有关详细信息,参见在正运行的进程上收集性能数据。
无法记录 JavaTM 监视器的跟踪数据。
有关详细信息,参见《程序性能分析工具》手册。
另请参见 | |
---|---|
收集性能数据 |