【问题标题】:JFR ExecutionSample vs ThreadDumpJFR 执行示例与线程转储
【发布时间】:2021-12-25 23:53:21
【问题描述】:
  1. 如果我需要使用 JFR 执行 Java 分析,最好使用什么: ExecutionSample 事件每 X 毫秒或 ThreadDump 事件每 X 毫秒?
  2. 有没有办法让 ExecutionSample 事件和/或 ThreadDump 事件只针对特定线程而不是针对所有线程?

【问题讨论】:

    标签: profiling thread-dump jfr


    【解决方案1】:
    1. 如果要对 Java 线程进行采样,则应使用 jdk.ExecutionSample,因为开销会低得多。

    2. 无法将 jdk.ThreadDump 配置为只记录单个线程,或者让 jdk.ExecutionSample 同时对所有线程进行采样。

    说明

    负责发出 jdk.ExecutionSample 的采样器会定期挂起 Java 线程并遍历其堆栈,但所有其他线程可以继续运行。堆栈跟踪存储为 ID,因此如果重复,只需重写几个字节。

    jdk.ThreadDump 事件的实现将所有 Java 线程带到一个安全点,这意味着应用程序将完全停止。运行 Java 线程只会在生成的机器代码中安全点轮询所在的位置停止。这意味着采样不会那么准确。当所有线程都停止时,所有堆栈都由一个线程遍历,这意味着其他内核将等待。结果以文本形式写入,因此如果多次出现相同的堆栈跟踪,则需要重写所有帧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多