如何在未在控制台中运行的 Windows 上获取 Java 进程的线程和堆转储

新手上路,请多包涵

我有一个从控制台运行的 Java 应用程序,该控制台又执行另一个 Java 进程。我想获取该子进程的线程/堆转储。

在 Unix 上,我可以执行 kill -3 <pid> 但在 Windows AFAIK 上,获取线程转储的唯一方法是在控制台中按 Ctrl-Break。但这只给我父进程的转储,而不是子进程。

还有另一种方法来获取堆转储吗?

原文由 macgreg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 391
1 个回答

您可以使用 jmap 获取正在运行的任何进程的转储,假设您知道 pid

使用任务管理器或资源监视器获取 pid 。然后

jmap -dump:format=b,file=heap.hprof <pid>

获取该进程的堆。

对于安装了 bashpgrep 并且运行单个 Java 进程的系统,请尝试:

 jmap -dump:format=b,file=heap.hprof $(pgrep java)

原文由 rkaganda 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题