jvm運行時保留相關信息總結

 

jdk1.8

1、gc日誌

用法1

-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/opt/tomcat/plsgc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=9 -XX:GCLogFileSize=20M

常見用法

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/tomcat/gc.log

 

參數解釋:

-verbose:gc

顯示有關每個垃圾收集(GC)事件的信息。

Displays information about each garbage collection (GC) event.

-XX:+PrintHeapAtGC

   在gc的時候打印heap中的信息。jre1.9及以上有描述,1.8暫無描述,實驗可用

 -XX:+PrintGCDateStamps

       啓用在每個GC上打印日期戳。默認情況下,此選項處於禁用狀態。

Enables printing of a date stamp at every GC. By default, this option is disabled.

-XX:+PrintGCTimeStamps

啓用在每個GC上打印時間戳。默認情況下,此選項處於禁用狀態。

Enables printing of time stamps at every GC. By default, this option is disabled.

-XX:+PrintGCDetails

允許在每個GC上打印詳細消息。默認情況下,此選項處於禁用狀態。

Enables printing of detailed messages at every GC. By default, this option is disabled.

-XX:+PrintTenuringDistribution

啓用年齡信息的打印。以下是輸出的示例:

Desired survivor size 48286924 bytes, new threshold 10 (max 10)

- age 1: 28992024 bytes, 28992024 total

- age 2: 1366864 bytes, 30358888 total

- age 3: 1425912 bytes, 31784800 total

...

年齡1的是最年輕的倖存者(它們是在上一次輕量之後創建的,在最近一次輕量之後倖存下來,並從eden移動到倖存者(s0,s1)空間)。

年齡2的物體存活了兩次輕量gc(在第二次gc期間,它們被從一個倖存者空間複製到下一個倖存者空間)。等等。

在上一個例子中,28 992 024字節在一次清除後存活,並從eden複製到倖存者空間,1366864字節被年齡2的對象等佔用。每行中的第三個值是年齡n或更小的對象的累積大小。

默認情況下,此選項處於禁用狀態。

-XX:+PrintGCApplicationStoppedTime

允許打印暫停(例如GC暫停)持續的時間。默認情況下,此選項處於禁用狀態

Enables printing of how much time the pause (for example, a GC pause) lasted. By default, this option is disabled.

-XX:+UseGCLogFileRotation

爲PrintTenuringDistribution記錄的內容。使用GC日誌文件旋轉.

jre1.9及以上有描述,1.8暫無描述,實驗可用

-XX:NumberOfGClogFiles=number of files

Handles large log files. The number of files must be greater than or equal to 1. The default is 1.處理大型日誌文件。文件數必須大於或等於1。默認值爲1。

jre1.9及以上有描述,1.8暫無描述,實驗可用

 

-XX:GCLogFileSize=number

處理大型日誌文件。數字可以是numberM或numberK的形式。默認設置爲512K。

 jre1.9及以上有描述,1.8暫無描述,實驗可用

-Xloggc

設置要將詳細GC事件信息重定向到其中進行日誌記錄的文件。寫入此文件的信息類似於-verbose:gc的輸出,其中包含自每個記錄的事件之前的第一個gc事件以來經過的時間。-Xloggc選項重寫-verbose:gc,如果這兩個選項都是用同一個java命令給出的。

Sets the file to which verbose GC events information should be redirected for logging. The information written to this file is similar to the output of -verbose:gc with the time elapsed since the first GC event preceding each logged event. The -Xloggc option overrides -verbose:gc if both are given with the same javacommand.

  1. 飛行器記錄

JFR飛行記錄分爲兩種 - 連續記錄和分析記錄。

連續錄製:默認設置,連續錄製是始終開啓並保存的錄製,應用程序遇到任何問題,可從最後一小時轉儲數據中,查看問題發生時的情況。使用開銷極低的錄製配置項。配置項中不包括獲得堆統計信息,但仍會收集大量有用的數據。連續錄製非常適合長期運行,在調試極少發生的問題時非常有用。可使用jcmd或JMC手動轉儲錄製。還可在JMC中設置觸發器,以在滿足某些特定條件時轉儲飛行記錄。

分析記錄不連續):打開後,運行一段時間,然後,停止的記錄。通常,此模式的配置文件記錄會啓用更多事件,可能對性能產生影響,根據對分析記錄使用情況,修改打開的事件。

 

JFR是商業功能,須指定-XX:+UnlockCommercialFeatures

分析記錄

啓動20秒後開啓記錄,記錄時間爲60秒,該記錄將保存到名爲myrecording.jfr的文件中

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay=20s,duration=60s,name=myrecording,filename=/opt/tomcat/myrecording.jfr,settings=profile

 

settings參數採用模板的路徑和名稱。默認模板位於jre/lib/jfr文件夾中,兩個標準配置文件是:分別是用於連續錄製和低開銷設置的配置文件,及收集更多數據,用於分析記錄的配置文件。

連續錄製:

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=6h,settings=default

 

參數簡單介紹:

 

-XX:+FlightRecorder

 

在應用程序運行時啓用Java飛行記錄器(JFR)。這是一個與-XX:+UnlockCommercialFeatures選項結合使用的商業功能,

Enables the use of the Java Flight Recorder (JFR) during the runtime of the application. This is a commercial feature that works in conjunction with the -XX:+UnlockCommercialFeatures option as follows:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

If this option is not provided, Java Flight Recorder can still be enabled in a running JVM by providing the appropriate jcmd diagnostic commands.

 

-XX:StartFlightRecording=parameter=value

 

 爲Java應用程序啓動JFR記錄。這是一個與-XX:+UnlockCommercialFeatures選項結合使用的商業功能。此選項相當於JFR.start diagnostic命令,該命令在運行時啓動錄製。開始JFR錄製時,可以設置以下參數:

compress={true|false}

指定是否使用gzip文件壓縮實用程序壓縮磁盤上的JFR記錄日誌文件(JFR類型)。僅當指定了filename參數時,此參數纔有效。默認設置爲false(錄製不壓縮)。要啓用壓縮,請將參數設置爲true。

defaultrecording={true|false}

指定錄製是連續後臺錄製還是運行有限時間。默認情況下,此參數設置爲false(錄製運行的有限時間)。要使錄製連續運行,請將參數設置爲true。

delay=time

指定Java應用程序啓動時間與錄製開始之間的延遲。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定10m表示10分鐘)。默認情況下,沒有延遲,此參數設置爲0。

dumponexit={true|false}

指定當JVM以受控方式終止時,是否應生成JFR數據的轉儲文件。默認情況下,此參數設置爲false(未生成出口的轉儲文件)。要啓用它,請將參數設置爲true。

轉儲文件將寫入filename參數定義的位置。

例如:

-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true

duration=time

指定錄製的持續時間。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定5h表示5小時)。默認情況下,持續時間不受限制,此參數設置爲0。

filename=path

指定JFR記錄日誌文件的路徑和名稱。

name=identifier

指定JFR記錄的標識符。默認設置爲錄製x。

maxage=time

指定爲默認記錄保留的磁盤數據的最大年齡。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定30s表示30秒)。默認情況下,最大年齡設置爲15分鐘(15m)。

maxsize=size

指定爲缺省記錄保留的磁盤數據的最大大小(以字節爲單位)。追加k或k,以指定大小(KB)、m或m,以指定大小(MB)、g或g,以指定大小(GB)。默認情況下,磁盤數據的最大大小不受限制,並且該參數設置爲0。

settings=path

指定事件設置文件(JFC類型)的路徑和名稱。默認情況下,使用default.jfc文件,該文件位於JAVA_HOME/jre/lib/jfr中。

例子:

可以通過用逗號分隔多個參數來指定值。例如,要將記錄保存到當前工作目錄中的test.jfr,並指示jfr壓縮日誌文件,請指定以下內容:

-XX:StartFlightRecording=filename=test.jfr,compress=true

 

-XX:FlightRecorderOptions=parameter=value

設置控制JFR行爲的參數。這是一個與-XX:+UnlockCommercialFeatures選項結合使用的商業功能。此選項只能在啓用JFR時使用(即指定了-XX:+FlightRecorder選項)。

以下列表包含所有可用的JFR參數:

 

defaultrecording={true|false}

指定錄製是連續後臺錄製還是運行有限時間。默認情況下,此參數設置爲false(錄製運行的有限時間)。要使錄製連續運行,請將參數設置爲true。

dumponexit={true|false}

指定當JVM以受控方式終止時,是否應生成JFR數據的轉儲文件。默認情況下,此參數設置爲false(未生成出口的轉儲文件)。要啓用它,請將參數設置爲true,並將defaultrecording設置爲true。

轉儲文件被寫入由dumponexitpath 參數定義的位置。

dumponexitpath=path

指定當JVM以控制方式退出時創建的具有JFR數據的轉儲文件的路徑和名稱,如果您設置了dumponexit=true參數。僅當同時設置defaultrecording=true時,設置路徑纔有意義。

如果指定的路徑是目錄,JVM將分配一個顯示創建日期和時間的文件名。如果指定的路徑包含文件名,並且如果該文件已經存在,JVM通過將日期和時間戳附加到指定的文件名來創建新文件。

globalbuffersize=size

指定用於數據保留的主內存總量(字節)。追加k或k,以指定大小(KB)、m或m,以指定大小(MB)、g或g,以指定大小(GB)。默認情況下,大小設置爲462848字節。

loglevel={quiet|error|warning|info|debug|trace}

指定JFR寫入日誌文件的數據量。默認情況下,設置爲“info”。

maxage=time

指定爲默認記錄保留的磁盤數據的最大年齡。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定30s表示30秒)。默認情況下,最大年齡設置爲15分鐘(15m)。

僅當設置disk=true參數時,此參數纔有效。

maxchunksize=size

指定記錄中數據塊的最大大小(以字節爲單位)。追加k或k,以指定大小(KB)、m或m,以指定大小(MB)、g或g,以指定大小(GB)。默認情況下,數據塊的最大大小設置爲12 MB。

maxsize=size

指定爲缺省記錄保留的磁盤數據的最大大小(以字節爲單位)。追加k或k,以指定大小(KB)、m或m,以指定大小(MB)、g或g,以指定大小(GB)。默認情況下,磁盤數據的最大大小不受限制,並且該參數設置爲0。

僅當設置disk=true參數時,此參數纔有效。

repository=path

指定用於臨時磁盤存儲的存儲庫(目錄)。默認情況下,使用系統的臨時目錄。

samplethreads={true|false}

指定是否啓用線程採樣。僅當採樣事件與此參數一起啓用時,纔會發生線程採樣。默認情況下,此參數處於啓用狀態。

settings=path

指定事件設置文件(JFC類型)的路徑和名稱。默認情況下,使用default.jfc文件,該文件位於JAVA_HOME/jre/lib/jfr中。

stackdepth=depth

JFR的堆棧跟蹤的堆棧深度。默認情況下,深度設置爲64個方法調用。最大值爲2048,最小值爲1。

 threadbuffersize=size

  指定每個線程的本地緩衝區大小(字節)。追加k或k,以指定大小(KB)、m或m,以指定大小(MB)、g或g,以指定大小(GB)。此參數的值越高,允許在不爭用的情況下收集更多數據,以將其刷新到全局存儲。它可以在線程豐富的環境中增加應用程序佔用空間。默認情況下,本地緩衝區大小設置爲5 KB。

可以通過用逗號分隔多個參數來指定值。例如,要指示磁盤碎片整理程序將連續記錄寫入磁盤,並將數據塊的最大大小設置爲10 MB,請指定以下內容:

-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章