JVM生成的3種文件,你都見過嗎?

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

Java 虛擬機(JVM)生成3個關鍵文件,這些文件對於JVM優化性能和解決生產問題很是有用。這些文件是:java

  • (GC) Garbage collection log 垃圾收集日誌
  • Thread Dump 線程轉儲
  • Heap Dump 堆轉儲

帶着問題一探究竟

在本文中,讓咱們嘗試理解這三個關鍵文件,在哪裏使用它們,它們看起來如何,如何捕獲它們,如何分析它們和它們的差別是什麼。算法

Garbage Collection Log (垃圾收集日誌)

什麼是 GC Log

GC 日誌包含垃圾收集事件的相關信息。它將指示運行了多少 GC 事件、它們是什麼類型的 GC 事件(即 Young GC 或 Full GC)、每一個 GC 事件暫停應用程序的時間、每一個 GC 事件回收了多少對象。app

GC 日誌長什麼樣?

能夠在這裏找到一個垃圾收集日誌文件示例:jvm

日誌示例ide

分析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寶典
a

相關文章
相關標籤/搜索