JVM堆内存转储

堆转储是 JVM 中特定时刻内存中的所有对象的快照。它们对于解决内存泄漏问题并优化 Java 应用程序中的内存使用情况非常有用。

堆转储通常以二进制格式 hprof 文件存储。我们可以使用 jhat 或 JVisualVM 等工具打开和分析这些文件。

下面介绍两种堆转储的方式:

1. JCMD

  jcmd 是一个非常完整的工具,它通过向 JVM 发送命令请求来工作。我们必须在运行 Java 进程的同一台计算机上使用它。

  其众多命令之一是 GC.heap_dump。我们只需指定进程的 pid 和输出文件路径,就可以使用它来获取堆转储:

jcmd  GC.heap_dump 

  例如:

[root@cwy-hbcsh-zyl-1 HDTool]# jps
22387 jar
17925 jar
13383 jar
26682 Jps
21422 jar
[root@cwy-hbcsh-zyl-1 HDTool]# jcmd 17925 GC.heap_dump /opt/HDTool/dump.hprof
17925:
Heap dump file created
[root@cwy-hbcsh-zyl-1 HDTool]#

2. 自动捕捉head dump

  上面工具jcmd旨在在特定时间手动捕获堆转储。在某些情况下,我们希望在发生内存溢出错误 java.lang.OutOfMemoryError 时, JVM自动执行堆内存转储,以方便事后进行排查和分析。

  JVM提供了一个命令行启动参数 HeapDumpOnOutOfMemoryError, 使用的格式为:

java -XX:+HeapDum

你可能感兴趣的:(JVM,性能测试,jvm)