發(fā)布于:2021-02-15 00:00:31
0
1464
0
Java虛擬機(JVM)中的垃圾回收(GC)日志,線程轉儲和堆轉儲是什么?在本文中,我們嘗試了解這3個關鍵工件,在哪里使用它們,外觀如何,如何捕獲它們,如何分析它們及其差異。
Java虛擬機(JVM)生成3個關鍵工件,這些工件對于優(yōu)化性能和解決生產問題很有用。這些工件是:
垃圾收集(GC)日志
線程轉儲
堆轉儲
在本文中,我們嘗試了解這3個關鍵工件,在哪里使用它們,外觀如何,如何捕獲它們,如何分析它們及其差異。
1.垃圾收集日志
a)什么是GC日志?
GC日志包含垃圾回收事件的相關信息。它將指示運行了多少個GC事件,它們是什么類型的GC事件(即,Young GC或Full GC),每個GC事件將應用程序暫停多長時間,每個GC事件回收了多少個對象。
b)GC日志的外觀如何?
可以在此處找到樣本垃圾收集日志文件。
c)在哪里使用GC日志?
垃圾收集日志用于研究應用程序的GC和內存性能。它用于優(yōu)化GC暫停時間,用于確定應用程序的最佳內存大小,也用于解決與內存相關的問題。
d)如何生成GC日志?
您可以通過傳遞以下JVM參數(shù)來生成垃圾收集日志:
對于Java版本直至8:
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:<file-path>
對于從9開始的Java版本:
-Xlog:gc*:file=<file-path>
file-path:是要寫入垃圾收集日志文件的位置。
e)如何理解GC日志?
垃圾收集日志格式會有所不同,具體取決于誰是您的JVM供應商(Oracle,HP,IBM,Azul等),Java版本(1.5、5、6、7、8、9、10、11、12,…),垃圾您傳遞的收集算法(串行,并行,CMS,G1,Shenandoah,Z GC)和JVM參數(shù)。因此,沒有一種可用的標準化格式。但是,這里有一個視頻教程,它試圖幫助您了解GC日志文件格式。
f)使用哪些工具來分析GC日志?
有多種垃圾收集日志分析工具。這里提供了一些受歡迎的工具:GCeasy,IBM GC和內存可視化工具,HP JMeter,Google Garbage Cat。
2.線程轉儲
a)什么是線程轉儲?
線程轉儲是某個時間點在應用程序中運行的所有線程的快照。它包含有關應用程序中每個線程的所有信息,例如:線程狀態(tài),線程ID,本機ID,線程名稱,堆棧跟蹤,優(yōu)先級。
b)線程轉儲的外觀如何?
示例線程轉儲可以在這里找到。
c)在哪里使用線程轉儲?
線程轉儲主要用于解決生產問題,例如CPU尖峰,應用程序無響應,響應時間短,線程掛起,內存消耗高。
d)如何生成線程轉儲?
可以使用8個不同的選項從正在運行的應用程序中捕獲線程轉儲。進行線程轉儲的最常見選項是使用“ jstack”工具。jstack工具位于JDK_HOME bin文件夾中。這是捕獲線程轉儲所需發(fā)出的命令:
jstack -l <pid> > <file-path>
其中pid:是應捕獲其線程轉儲的應用程序的進程ID,而file-path:是將寫入線程轉儲的文件路徑。
e)如何理解線程轉儲?
這是一個視頻講座,詳細介紹了如何理解線程轉儲。
f)使用哪些工具來分析線程轉儲?
這里是使用最廣泛的線程轉儲分析工具:fastThread,Samurai,IBM Thread&Monitor分析器,Visual VM。
3.堆轉儲
a)什么是堆轉儲?
堆轉儲是某個時間點應用程序內存的快照。它包含信息,例如內存中的對象是什么,它們攜帶的值是什么,大小是什么,它們引用的其他對象是什么。
b)堆轉儲的外觀如何?
可以在此處找到樣本堆轉儲。(注意:它將采用二進制格式。因此您實際上無法讀取它)。
c)堆轉儲在哪里使用?
堆轉儲主要用于解決與內存相關的OutOfMemoryError問題。
d)如何生成堆轉儲?
可以使用7個不同的選項從運行的應用程序中捕獲堆轉儲。進行堆轉儲的最常見選項是使用“ jmap”工具。jmap工具位于JDK_HOME bin文件夾中。這是您需要發(fā)出以捕獲的命令:
<span style="font-weight: 400;">jmap -dump:format=b,</span><span style="font-weight: 400;">
</span><span style="font-weight: 400;">file=<file-path> <pid> </span>
其中pid:是Java進程ID,應捕獲其堆轉儲,而file-path:是將堆轉儲寫入其中的文件路徑。
e)如何理解堆轉儲?
堆轉儲文件為二進制格式,并且通常較大。除此之外,它們的格式嚴重缺乏文檔。因此,您必須使用堆轉儲分析工具(在下一個問題中給出)來分析和理解它們。
f)使用哪些工具來分析堆轉儲?
以下是使用最廣泛的堆轉儲分析工具:Eclipse MAT,HeapHero和JVisualVM。