首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Windows上未在控制台中运行的Java进程的线程和堆转储

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

Stack Overflow用户
提问于 2009-01-03 02:17:31
回答 19查看 541.2K关注 0票数 254

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

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

有没有其他方法可以获得堆转储?

EN

回答 19

Stack Overflow用户

发布于 2010-06-15 12:12:24

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

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

代码语言:javascript
复制
jmap -dump:format=b,file=cheap.hprof <pid>

来获取该进程的堆。

票数 418
EN

Stack Overflow用户

发布于 2013-10-15 06:31:35

我认为在Linux进程中创建.hprof文件的最好方法是使用jmap命令。例如:jmap -dump:format=b,file=filename.hprof {PID}

票数 34
EN

Stack Overflow用户

发布于 2009-11-30 01:46:05

除了使用前面提到的jconsole/visualvm之外,您还可以在另一个命令行窗口上使用jstack -l <vm-id>,并捕获该输出。

可以使用任务管理器(它是windows和unix上的进程id )或使用jps找到。

Sun JDK版本6和更高版本中都包含jstackjps

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/407612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档