Jvm heapdump不是由信号生成的

时间:2016-11-18 13:04:52

标签: 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}
ccstr HeapDumpPath := /tmp/xxx {manageable}

我错过了什么?

jmap虽然有效。

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

2 个答案:

答案 0 :(得分:0)

不幸的是,

-XX:HeapDumpPath仅在与-XX:HeapDumpOnOutOfMemory一起使用时才有效。您可以在Oracle docs中找到参考 。 您可以通过jstack获取堆栈跟踪,或使用JDK中包含的Java Mission Control工具监视JVM。

编辑:您还可以使用jmap来获取堆转储

答案 1 :(得分:0)

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

{{#each Teams this.0.Sponsored}} some html {{#each}} 意味着不同的东西。它打印堆布局摘要,例如

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 是生成堆转储的正确方法。