1. 程式人生 > 實用技巧 >JVM生成的3種檔案,你都見過嗎?

JVM生成的3種檔案,你都見過嗎?

什麼是 Java 虛擬機器(JVM)中的垃圾收集(GC)日誌、執行緒轉儲和堆轉儲?

Java 虛擬機器(JVM)生成3個關鍵檔案,這些檔案對於JVM優化效能和解決生產問題非常有用。這些檔案是:

  • (GC) Garbage collection log 垃圾收集日誌
  • Thread Dump 執行緒轉儲
  • Heap Dump 堆轉儲

帶著問題一探究竟

在本文中,讓我們嘗試理解這三個關鍵檔案,在哪裡使用它們,它們看起來如何,如何捕獲它們,如何分析它們和它們的差異是什麼。

Garbage Collection Log (垃圾收集日誌)

什麼是 GC Log

GC 日誌包含垃圾收集事件的相關資訊。它將指示運行了多少 GC 事件、它們是什麼型別的 GC 事件(即 Young GC 或 Full GC)、每個 GC 事件暫停應用程式的時間、每個 GC 事件回收了多少物件。

GC 日誌長什麼樣?

可以在這裡找到一個垃圾收集日誌檔案示例:

日誌示例

分析GC 日誌能查看出什麼問題 ?

垃圾收集日誌用於研究應用程式的 GC 和記憶體效能。它用於優化 GC 暫停時間,用於確定應用程式的最佳記憶體大小,還用於排除與記憶體相關的問題

如何生成 GC 日誌?

您可以通過傳遞以下 JVM 引數來生成垃圾收集日誌:
對於 Java8:

-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:<file-path>

從9開始的 Java 版本:

-Xlog:gc*:file=<file-path>

File-path: 是將要寫入垃圾收集日誌檔案的位置。

如何理解 GC 日誌?

垃圾收集日誌的格式因 JVM 供應商的不同而不同(Oracle、 HP、 IBM、....,Java version (1.5,5,6,7,8,9,10,11,12,...) ,垃圾收集演算法(Serial,Parallel,CMS,G1....和 JVM 各種引數。因此,沒有一種可用的標準格式.不過這裡有一個教程可以幫助你理解GC日誌:link

用什麼工具來分析 GC 日誌?

有多個垃圾收集日誌分析工具。這裡給出一些流行的例子: GCeasy,IBM GC & Memory visualizer,HP JMeter,Google Garbage Cat。

執行緒轉儲(Thread dump)

什麼是 Thread dump?

執行緒轉儲是應用程式中在某個時間點上執行的所有執行緒的快照。它包含應用程式中每個執行緒的所有資訊,例如: 執行緒狀態、執行緒 Id、本機 Id、執行緒名稱、堆疊跟蹤、優先順序。

執行緒轉儲檔案長什麼樣?

示例執行緒轉儲檔案可以在這裡找到:

檔案示例

執行緒轉儲檔案能解決什麼問題?

執行緒轉儲檔案主要用於排除生產問題,例如 CPU 峰值、應用程式中的無響應性、響應時間差、執行緒掛起、高記憶體消耗。

如何生成執行緒轉儲檔案?

使用執行緒轉儲最常見的選擇是使用“ jstack”工具。Jstack 工具是在 JDK_home\bin 資料夾中提供的。命令:

jstack -l <pid> > <file-path>

其中 pid: 是應用程式的程序 Id,應該捕獲其執行緒轉儲,file-path: 是將執行緒轉儲寫入的檔案路徑。

用什麼工具來分析執行緒轉儲檔案?

以下是使用最廣泛的執行緒轉儲分析工具: fastThreadSamuraiIBM Thread & Monitor analyzerVisual VM

堆轉儲(Heap dump)

什麼是堆轉儲?

堆轉儲是應用程式記憶體在某個時間點上的快照。它包含諸如記憶體中的物件是什麼,它們攜帶什麼值,它們的大小是什麼,它們引用什麼其他物件等資訊。

堆轉儲看起來長什麼樣?

這裡可以找到一個示例堆轉儲。示例檔案

(注意: 它將是二進位制格式的。所以你實際上不能閱讀它)

分析堆轉儲能解決什麼問題?

堆轉儲主要用於排除與記憶體有關的 OutOfMemoryError 問題

如何生成堆轉儲檔案?

使用堆轉儲最常見的選擇是使用“ jmap”工具。Jmap 工具是在 JDK_home\bin 資料夾中提供的

jmap -dump:format=b,file=<file-path>  [pid]
其中 pid: 是 Java 程序 Id ,file-path: 是將堆轉儲寫入的檔案路徑。

如何分析和理解 Heap dump 用什麼工具來分析 ??

堆轉儲檔案採用二進位制格式,並且大小往往很大。除此之外,他們的格式嚴重缺乏文件。因此,您必須使用堆轉儲分析工具,最廣泛的堆轉儲分析工具有: Eclipse MAT、 HeapHero 和 JVisualVM。

關注公眾號:java寶典