【发布时间】:2011-06-29 05:12:19
【问题描述】:
我想获取某个 Java 进程的堆转储(疑似内存泄漏)。但是,当我启动 jvisualvm 工具时,我看不到任何正在运行的 Java 进程。
我已经在 Google 上搜索过,并且已经找到几篇文章说您必须使用与启动 jvisualvm 工具相同的 JDK 运行 Java 进程,以便它能够看到它们。但是,据我所知,情况已经如此。我在本地做所有事情(我可以远程访问机器)。
需要考虑的几点:
- 进程正在防火墙的 Windows 2008 服务器上运行
- 进程正在使用重命名版本的 JDK
java.exe可执行文件运行 - 据我所知,进程正在使用 1.6.0_18 JDK 运行
- 其中一个正在运行的进程启动 RMI 注册表
我正在等待服务器的虚拟化副本,以便我可以处理它(这是一个生产服务器)。但与此同时;关于为什么我看不到 jvisualvm(或 jconsole)中的任何进程的任何想法?
【问题讨论】:
-
为什么要重命名java.exe?我很确定 VisualVM 通过查找所有运行 java.exe 的进程来获取它的进程列表
-
您无法在 Windows 中轻松看到命令行争论,因此您最终重命名/复制 java.exe,以便您知道哪个进程是什么。
-
jconsole 和 visualvm 是用户特定的。如果进程以其他用户身份运行,您将无法看到它们,但您可以打开安全性以允许“远程”管理它们
-
感谢您的提示,很可能就是这样。这些进程是通过 Windows 服务启动的,因此它们可能在某个 Windows 服务帐户下运行。你能提供任何关于这方面文章的链接吗?另外,请随时提供作为答案,如果它是正确的,我会批准它。
-
@Peter 如果您想查看 Windows 机器上运行的内容,以及完整的命令行参数、tcp/ip 套接字等,那么您应该使用 sysinternals 进程资源管理器 technet.microsoft.com/en-us/sysinternals/bb896653 类似于类固醇上的任务管理器.作为开发人员,一旦您尝试过它,您将始终希望在您使用的任何 Windows 机器上使用它。 sysinternals 套件中还有许多其他非常有用的工具,我也喜欢 junction,它为 windows 带来了真正的 unix 类符号链接。