我正在调试Sun的JDK 1.4.2_18上运行的应用程序中的内存泄漏.看来这个版本支持命令行param -XX:+ HeapDumpOnCtrlBreak,它可能导致JVM在遇到控制中断时转储堆.如何将其发送到Linux机器上的后台进程?似乎杀死信号是应该工作的方式,但是我杀了-l没有报告任何显然是Ctrl-Break的东西,至少在我的Ubuntu盒子上.
更新:我测试了使用Sun JDK 1.4.2_18杀死-3(_14是第一个以这种方式转储堆),并且它有效.已创建堆转储文件,并且该进程仍在运行.
Ctrl- \是UNIX/Linux等效的Windows Ctrl-Break.维基百科还告诉我,你也可以在Linux虚拟控制台上使用Ctrl-4或SysRq(我想你需要一些奇怪的东西,普通终端模拟器才能传递那些按键的表示(通过ssh/telnet)).
kill -QUIT可能会这样做(它会生成一个由Windows上的ctrl-break生成的线程转储.虽然我没有尝试使用堆转储选项).