我有一个从控制台运行的Java应用程序,该控制台又执行另一个Java进程。我想获取该子进程的线程/堆转储。
在Unix上,我可以执行kill -3 <pid>,但在Windows AFAIK上,获取线程转储的唯一方法是在控制台中按Ctrl-Break。但这只给了我父进程的转储,而不是子进程。
有没有其他方法可以获得堆转储?
发布于 2010-06-15 12:12:24
假设您知道pid,您可以使用jmap获取任何正在运行的进程的转储。
使用任务管理器或资源监视器获取pid。然后
jmap -dump:format=b,file=cheap.hprof <pid>来获取该进程的堆。
发布于 2013-10-15 06:31:35
我认为在Linux进程中创建.hprof文件的最好方法是使用jmap命令。例如:jmap -dump:format=b,file=filename.hprof {PID}
发布于 2009-11-30 01:46:05
除了使用前面提到的jconsole/visualvm之外,您还可以在另一个命令行窗口上使用jstack -l <vm-id>,并捕获该输出。
可以使用任务管理器(它是windows和unix上的进程id )或使用jps找到。
Sun JDK版本6和更高版本中都包含jstack和jps。
https://stackoverflow.com/questions/407612
复制相似问题