java - Jvm heapdump 不是由信号生成的

标签 java linux jvm

我注意到 jvm 没有通过信号 3 生成堆转储。 我试过 jvm 1.8.60 和 jvm 1.7.60 (ubuntu 14)。 当 jvm 收到信号时,它会将线程转储打印到控制台,但不会出现内存转储文件。

java -XX:HeapDumpPath=/tmp/xxx

跟踪 java 选项确认一切正常。

bool PrintHeapAtSIGBREAK = true {product}<br/> ccstr HeapDumpPath := /tmp/xxx {manageable}

我错过了什么?

虽然 jmap 可以工作。

kill 和 jvm 在同一个用户下运行。 jar 是一个 hello world 应用程序。

最佳答案

JVM 不应该在 SIGQUIT (kill -3) 上生成堆转储。

PrintHeapAtSIGBREAK 意味着不同的东西。它打印堆布局摘要,例如

Heap
 PSYoungGen      total 75264K, used 3870K [0x000000076c600000, 0x0000000771a00000, 0x00000007c0000000)
  eden space 64512K, 6% used [0x000000076c600000,0x000000076c9c7b68,0x0000000770500000)
  from space 10752K, 0% used [0x0000000770f80000,0x0000000770f80000,0x0000000771a00000)
  to   space 10752K, 0% used [0x0000000770500000,0x0000000770500000,0x0000000770f80000)
 ParOldGen       total 172032K, used 0K [0x00000006c5200000, 0x00000006cfa00000, 0x000000076c600000)
  object space 172032K, 0% used [0x00000006c5200000,0x00000006c5200000,0x00000006cfa00000)
 Metaspace       used 2471K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 267K, capacity 386K, committed 512K, reserved 1048576K

jmap 是生成堆转储的正确方法。

关于java - Jvm heapdump 不是由信号生成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677873/

相关文章:

linux - 如何撤消删除我的 .git/文件夹?

linux - 如何在 Linux 上使用 Java 将 GEdit 置于最前面

hadoop - HBase 区域服务器崩溃

java - 如果 JVM 崩溃了,Thread 还存在吗?

java - 从 Java 发送 POST 和 FILE 数据

java - 如何使用 replace(char, char) 将字符 b 的所有实例替换为空

java.lang.StringIndexOutOfBoundsException : index=0 length=0 in get sqlite database 异常

自己的对象和 .equals 的 Java 集合

linux - 非 www 到带有额外重定向的 www

jvm - Java 堆转储权限