什么是 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: 是将线程转储写入的文件门路。
用什么工具来剖析线程转储文件?
以下是应用最宽泛的线程转储剖析工具: fastThread
、Samurai
、IBM Thread & Monitor analyzer
、Visual 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 宝典