什么是垃圾收集日志,Thread Dump和Heap Dump?


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

  • Garbage collection (GC) log
  • Thread Dump
  • Heap Dump

在本文中,让我们尝试了解这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.Thread Dump a)什么是Thread Dump? Thread Dump是某个时间点在应用程序中运行的所有线程的快照。它包含有关应用程序中每个线程的所有信息,例如线程状态,线程ID,本机ID,线程名称,堆栈跟踪和优先级。

b)Thread Dump是什么样的? 可以在此处 找到示例线程转储。

c)在哪里使用https://tier1app.com/dist/sample/g1-repeatedGC.txt? 线程转储主要用于解决生产问题,例如CPU尖峰,应用程序无响应,响应时间差,线程挂起,内存消耗高。

d)如何生https://tier1app.com/dist/sample/g1-repeatedGC.txt? 可以使用8个不同的选项从正在运行的应用程序中捕获线程转储。进行线程转储的最常见选项是使用“ jstack”工具。jstack工具在JDK_HOME \ bin文件夹中提供。这是您需要发出以捕获线程转储的命令:

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

在哪里

pid:是应用程序的进程ID,应捕获其线程转储

file-path:是将写入线程转储的文件路径。

e)如何理解https://tier1app.com/dist/sample/g1-repeatedGC.txt? 这是一个视频讲座,详细介绍了如何理解Thread Dump。

f)使用哪些工具分析Thread Dump? 以下是使用最广泛的Thread Dump分析工具:fastThread,Samurai,IBM Thread和Monitor分析器,Visual VM

3.Heap Dump a)什么是Heap Dump? Heap Dump是某个时间点应用程序内存的快照。它包含信息,例如内存中的对象是什么,它们携带的值是什么,大小是多少,它们引用的其他对象是什么。

b)Heap Dump是什么样子? 可以在此处找到样本Heap Dump。(注意:它将采用二进制格式。因此您实际上无法读取它)。

c)在哪里使用Heap Dump? 堆转储主要用于解决与内存相关的OutOfMemoryError问题。

d)如何生成Heap Dump? 可以使用7个不同的选项从运行的应用程序中捕获堆转储。进行Heap Dump的最常见选项是使用“ jmap”工具。jmap工具位于JDK_HOME \ bin文件夹中。这是您需要发出以捕获的命令:

jmap -dump:format=b,
file=<file-path> <pid>

在哪里

pid:是Java进程ID,应捕获其Heap Dump

file-path:是Heap Dump将写入其中的文件路径。

e)如何理解Heap Dump? Heap Dump文件为二进制格式,并且通常较大。除此之外,它们的格式严重缺乏文档。因此,您必须使用堆转储分析工具(在下一个问题中给出)来分析和理解它们。

f)使用哪些工具来分析Heap Dump? 以下是使用最广泛的堆转储分析工具:Eclipse MAT,HeapHero和JVisualVM。


原文链接:http://codingdict.com