J9 VM 在 linux shows/contains 只有一个线程上生成的核心转储

Core dump generated by J9 VM on linux shows/contains only one thread

J9 VM在linux平台上生成核心转储的原因是什么,它只是shows/contains只有一个线程(即当前线程) ?

注意:是完整的核心转储(未截断)。

(gdb) info threads
* 1 Thread 0x7f33544d9700 (LWP 6471)  0x00007f335484d6e4 in j9dump_create () from ./app/was/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedrefs/libj9prt24.so

这是by design(在下面的粗体中):

Linux does not provide an operating system API for generating a system dump from a running process. The JVM produces system dumps on Linux by using the fork() API to start an identical process to the parent JVM process. The JVM then generates a SIGSEGV signal in the child process. The SIGSEGV signal causes Linux to create a system dump for the child process. The parent JVM processes and renames the system dump, as required, by the -Xdump options, and might add additional data into the dump file.

The system dump for the child process contains an exact copy of the memory areas used in the parent. The SDK dump viewer can obtain information about the Java threads, classes, and heap from the system dump. However, the dump viewer [gdb], and other system dump debuggers show only the single native thread that was running in the child process.

如果你想要所有线程,可以巧妙地使用gcore ${PID}-Xdump:tool并执行gcore %pid

IBM proposed a kernel API to create a core dump 但出于安全原因 (DoS) 被拒绝。有一些用户态核心转储的实验。