
1. Java飛行記錄器
1.1. Java Flight Recorder,JFR
-
1.1.1. 最初是BEA公司的JRockit JVM的功能
-
1.1.2. 在JDK 8中,只有Oracle JVM支持JFR
-
1.1.3. 在JDK 11中,JFR可以在開源JVM中使用
1.2. JFR資料是JVM中事件的歷史記錄,可以用來診斷JVM過去的性能和操作
1.3. Java Mission Control(jmc)
1.4. 對正在運行的應用程式進行輕量級性能分析
-
1.4.1. 可以盡最大可能查看JVM內部資訊,因為它內建于JVM中
-
1.4.2. 在生產環境開啟后也同樣有用,因為可以檢查影響性能的事件
1.5. 在默認設定下,JFR的系統開銷非常低:對應用程式性能的影響小于1%
1.6. 由于JFR的開銷非常低,JFR的分析采樣頻率也相當低(至少在默認配置下)
1.7. 兩個模板
-
1.7.1. 默認模板
- 1.7.1.1. 限制事件,讓系統開銷小于1%
-
1.7.2. 性能分析模板
-
1.7.2.1. 將大多數基于閾值的事件設定為每10毫秒觸發一次
-
1.7.2.2. 開銷大約為2%
-
2. -XX:+FlightRecorder
2.1. 開啟了JFR功能
2.2. 直到記錄程序本身開啟之后才會有記錄
2.3. 在Oracle公司的JDK 8中,你必須在-XX:+FlightRecorder標志之前設定標志:-XX:+UnlockCommercialFeatures(默認值為false)
2.4. jinfo改變它們的值并開啟JFR
2.5. -XX:StartFlightRecording=string標志
3. -XX:FlightRecorderOptions=string引數
3.1. name=name
- 3.1.1. 用來標識記錄的名字
3.2. defaultrecording=<true|false>
-
3.2.1. 是否在初始時開啟記錄
-
3.2.2. 默認值是false
3.3. settings=path
- 3.3.1. 包含JFR設定的檔案名
3.4. delay=time
- 3.4.1. 記錄開始前的時間
3.5. duration=time
- 3.5.1. 記錄持續的時間
3.6. filename=path
- 3.6.1. 寫入記錄的檔案名
3.7. compress=<true|false>
-
3.7.1. 是否壓縮記錄
-
3.7.2. 用gzip
-
3.7.3. 默認值是false
3.8. maxage=time
- 3.8.1. 在回圈緩沖區中保存記錄資料的最長時間
3.9. maxsize=size
- 3.9.1. 在回圈緩沖區中保存記錄資料的最大大小
4. 開啟飛行記錄
4.1. % jcmd process_id JFR.start [options_list]
4.2. options_list是一系列以逗號分隔的名-值對,用來控制記錄方式
4.3. 使用-XX:FlightRecorderOptions=string標志時的選項完全相同
5. 啟用了持續記錄轉儲到檔案中
5.1. % jcmd process_id JFR.dump [options_list]
5.2. name=name
- 5.2.1. 已經開始的記錄名
5.3. filename=path
- 5.3.1. 轉儲檔案的位置
6. 終止正在進行的記錄
6.1. % jcmd process_id JFR.stop [options_list]
6.2. name=name
- 6.2.1. 要終止的記錄名
6.3. discard=boolean
- 6.3.1. 如果是true,則丟棄資料,而不是寫入之前提供的檔案中
6.4. filename=path
- 6.4.1. 將資料寫入給定的路徑
7. JFR以外的工具很難獲得的資訊
7.1. 類加載(classloading)
-
7.1.1. 加載和卸載的類的數量
-
7.1.2. 類由哪個類加載器加載
-
7.1.3. 類由哪個類加載器加載
7.2. 執行緒統計資料(thread statistics)
-
7.2.1. 創建和銷毀的執行緒數量
-
7.2.2. 執行緒轉儲
-
7.2.3. 哪些執行緒被阻塞在鎖上(以及具體的鎖)
7.3. 例外類(Throwable)
-
7.3.1. 應用程式使用的例外類
-
7.3.2. 拋出的例外和錯誤的數量,以及例外創建時的堆疊軌跡
7.4. TLAB分配(TLAB allocation)
-
7.4.1. 堆分配的數量和執行緒本地分配緩沖區(TLAB)的大小
-
7.4.2. 堆中分配的具體物件和它們分配時的堆疊軌跡
7.5. 檔案和套接字I/O(file and socket I/O)
-
7.5.1. I/O操作的時長
-
7.5.2. 每個讀寫呼叫的時長,導致讀寫耗費大量時間的具體檔案和套接字
7.6. 管程阻塞(monitor blocked)
-
7.6.1. 等待管程的執行緒
-
7.6.2. 阻塞具體執行緒的具體管程,以及被阻塞的時長
7.7. 代碼快取(code cache)
-
7.7.1. 代碼快取的大小和容量
-
7.7.2. 從代碼快取移除的方法
-
7.7.3. 代碼快取配置
7.8. 代碼編譯(code compilation)
-
7.8.1. 哪個方法被編譯,OSR編譯和編譯時長
-
7.8.2. JFR只是統一了幾個來源的資訊
7.9. 垃圾回收(garbage collection)
-
7.9.1. GC時間(包括單個階段)
-
7.9.2. 代的大小
-
7.9.3. JFR只是統一了幾個工具的資訊
7.10. 性能分析(profiling)
-
7.10.1. 探查分析和采樣分析
-
7.10.2. 很多高層次的概要資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547766.html
標籤:其他
上一篇:Python ArcPy批量掩膜、重采樣大量遙感影像
下一篇:(二)記憶體掃描器(面向物件版)
