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.
- 飛行器記錄
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