JFR 中 RecordedFile 的调用堆栈是否完整?
Are the call-stacks from a RecordedFile in JFR complete?
对于使用 Java Flight Recorder 的记录持续时间,在该持续时间内调用的所有方法是否都将列在 RecordedFile 中?
鉴于:
- 我没有记录部分事件。
- 我还没有创建任何自定义事件。
- 我正在使用 AdoptOpenJDK 11.0.10
提前感谢您的回答。
没有
首先,JFR 是一个采样 分析器。它不记录 all 方法转换;它取而代之的是定期采样。 IE。在指定的时间间隔内,它会查看当前线程 运行 的调用堆栈。
其次,JFR 在 fails to traverse a valid Java stack. I demonstrated this effect in my presentation 时往往会错过许多样本:JFR 在 10 秒的执行过程中只捕获了一个无意义的应用程序堆栈跟踪。
您可以通过调整采样 period
设置来选择 JFR 收集的样本数量。周期越小 - JFR 收集的堆栈样本越多。然而,最小的可能周期仅为 1 毫秒。此外,采样频率不能很好地与 运行 线程数成比例。只有一个线程收集所有 ExecutionSample
事件,无论您的服务器有多少核。
对于使用 Java Flight Recorder 的记录持续时间,在该持续时间内调用的所有方法是否都将列在 RecordedFile 中?
鉴于:
- 我没有记录部分事件。
- 我还没有创建任何自定义事件。
- 我正在使用 AdoptOpenJDK 11.0.10
提前感谢您的回答。
没有
首先,JFR 是一个采样 分析器。它不记录 all 方法转换;它取而代之的是定期采样。 IE。在指定的时间间隔内,它会查看当前线程 运行 的调用堆栈。
其次,JFR 在 fails to traverse a valid Java stack. I demonstrated this effect in my presentation 时往往会错过许多样本:JFR 在 10 秒的执行过程中只捕获了一个无意义的应用程序堆栈跟踪。
您可以通过调整采样 period
设置来选择 JFR 收集的样本数量。周期越小 - JFR 收集的堆栈样本越多。然而,最小的可能周期仅为 1 毫秒。此外,采样频率不能很好地与 运行 线程数成比例。只有一个线程收集所有 ExecutionSample
事件,无论您的服务器有多少核。