簡體   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