繁体   English   中英

Java Flight Recorder不报告所有GC事件

[英]Java Flight Recorder not reporting all GC events

我们已经建立了性能构建,并通过以下标志启用了我们的应用程序:

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=dumponexit=true,dumponexitpath=/tmp/ImaginaryApplication/logs/flightRecorder.jfr -XX:StartFlightRecording=defaultrecording=true,settings=MyCustomSetting

自定义设置是通过Flight Recorder UI创建的,所有设置均已打开。 我猜这里与我的问题有关的重要部分是:

  <selection name="gc-level" default="all" label="Garbage Collector">
    <option label="Off" name="off">off</option>
    <option label="Normal" name="detailed">normal</option>
    <option label="All" name="all">all</option>
  </selection>

  <condition name="gc-enabled-normal" true="true" false="false">
    <or>
      <test name="gc-level" operator="equal" value="normal"/>
      <test name="gc-level" operator="equal" value="all"/>
    </or>
  </condition>

  <condition name="gc-enabled-all" true="true" false="false">
    <test name="gc-level" operator="equal" value="all"/>
  </condition>

飞行记录在构建停止时生成。 但是,我不是100%确信它会记录所有内容。 首先,在“内存”->“垃圾收集”页面中仅报告了很少的GC。 我知道这一点,因为我们还打开了将GC写入文件的标志。 GC比飞行记录仪中报告的更多。 更重要的是,我担心内存分配结果没有记录准确的信息(就像GC事件一样)。 在这种情况下,我们可能会花费很多精力来调整错误的区域。

我错过了这里的任何设置吗?

先感谢您!

我使用settings=profile因为默认设置不会记录所有分配信息。

即使这样,它也仅记录触发新的TLAB的对象,该对象在默认情况下可能很大。 为了增加样本数量,我使用-XX:TLABSize=128k缩小了-XX:TLABSize=128k注意,这可能会影响性能,因此除了进行概要分析外,我不会使用。

默认情况下,所有垃圾收集事件均未启用。 我的意思是说,主要的GC事件在那里,所以您可以看到暂停时间等,但不能看到所有棘手的细节。

启用所有GC事件的最简单方法是使用Java Mission Control和“记录向导”导出配置。 在“垃圾收集”下拉菜单中选择“全部”。

如果无法使用JMC连接到JVM,则可以使用“窗口”菜单中位于JMC中的Flight Recorder模板管理器。 您可以导入JDK_HOME / bin / lib / jfr目录中的default.jfc,对其进行复制和编辑。 选择“全部”作为垃圾回收并将配置导出到新文件。

然后,您可以使用以下命令启动JVM:

java -XX:StartFlightRecording:settings=all-gc-events.jfc

JVM不会读取您的问题中显示的设置。 它们仅由JMC用于应用设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM