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