我有一个从控制台运行的 Java 应用程序,该控制台又执行另一个 Java 进程。我想获取该子进程的线程/堆转储。
在 Unix 上,我可以执行 kill -3 <pid>
但在 Windows AFAIK 上,获取线程转储的唯一方法是在控制台中按 Ctrl-Break。但这只给我父进程的转储,而不是子进程。
还有另一种方法来获取堆转储吗?
原文由 macgreg 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个从控制台运行的 Java 应用程序,该控制台又执行另一个 Java 进程。我想获取该子进程的线程/堆转储。
在 Unix 上,我可以执行 kill -3 <pid>
但在 Windows AFAIK 上,获取线程转储的唯一方法是在控制台中按 Ctrl-Break。但这只给我父进程的转储,而不是子进程。
还有另一种方法来获取堆转储吗?
原文由 macgreg 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.2k 阅读✓ 已解决
您可以使用
jmap
获取正在运行的任何进程的转储,假设您知道pid
。使用任务管理器或资源监视器获取
pid
。然后获取该进程的堆。
对于安装了
bash
和pgrep
并且运行单个 Java 进程的系统,请尝试: