我有一个从控制台运行的 Java 应用程序,该控制台又执行另一个 Java 进程。我想获得该子进程的线程/堆转储。
在 Unix 上,我可以做一个 kill -3 <pid>
但在 Windows AFAIK 上,获取线程转储的唯一方法是控制台中的 Ctrl-Break。但这只会给我父进程的转储,而不是子进程。
还有其他方法可以获得堆转储吗?
最佳答案
假设您知道 pid
,您可以使用 jmap
获取任何正在运行的进程的转储。
使用任务管理器或资源监视器获取 pid
。那么
jmap -dump:format=b,file=heap.hprof <pid>
获取该进程的堆。
对于安装了 bash
和 pgrep
并且运行单个 Java 进程的系统,请尝试:
jmap -dump:format=b,file=heap.hprof $(pgrep java)
关于java - 如何在 Windows 上获取不在控制台中运行的 Java 进程的线程和堆转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/407612/