[英]Custom events for GlassFish in Java Flight Recorder / Java Mission Control
[英]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.