什么是垃圾回收日志,线程转储,堆转储?

发布于:2021-02-15 00:00:31

0

1363

0

垃圾回收日志 线程转储 堆转储 Java JVM

Java虚拟机(JVM)中的垃圾回收(GC)日志,线程转储和堆转储是什么?在本文中,我们尝试了解这3个关键工件,在哪里使用它们,外观如何,如何捕获它们,如何分析它们及其差异。

Java虚拟机(JVM)生成3个关键工件,这些工件对于优化性能和解决生产问题很有用。这些工件是:

  1. 垃圾收集(GC)日志

  2. 线程转储

  3. 堆转储

在本文中,我们尝试了解这3个关键工件,在哪里使用它们,外观如何,如何捕获它们,如何分析它们及其差异。

1.垃圾收集日志

a)什么是GC日志?

GC日志包含垃圾回收事件的相关信息。它将指示运行了多少个GC事件,它们是什么类型的GC事件(即,Young GC或Full GC),每个GC事件将应用程序暂停多长时间,每个GC事件回收了多少个对象。

b)GC日志的外观如何?

可以在此处找到样本垃圾收集日志文件。

c)在哪里使用GC日志?

垃圾收集日志用于研究应用程序的GC和内存性能。它用于优化GC暂停时间,用于确定应用程序的最佳内存大小,也用于解决与内存相关的问题。

d)如何生成GC日志?

您可以通过传递以下JVM参数来生成垃圾收集日志:

对于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参数。因此,没有一种可用的标准化格式。但是,这里有一个视频教程,它试图帮助您了解GC日志文件格式。

f)使用哪些工具来分析GC日志?

有多种垃圾收集日志分析工具。这里提供了一些受欢迎的工具:GCeasy,IBM GC和内存可视化工具,HP JMeter,Google Garbage Cat。

2.线程转储

a)什么是线程转储?

线程转储是某个时间点在应用程序中运行的所有线程的快照。它包含有关应用程序中每个线程的所有信息,例如:线程状态,线程ID,本机ID,线程名称,堆栈跟踪,优先级。

b)线程转储的外观如何?

示例线程转储可以在这里找到。

c)在哪里使用线程转储?

线程转储主要用于解决生产问题,例如CPU尖峰,应用程序无响应,响应时间短,线程挂起,内存消耗高。

d)如何生成线程转储?

可以使用8个不同的选项从正在运行的应用程序中捕获线程转储。进行线程转储的最常见选项是使用“ jstack”工具。jstack工具位于JDK_HOME bin文件夹中。这是捕获线程转储所需发出的命令:

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文件夹中。这是您需要发出以捕获的命令:

<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。