jvisualvm没有列出某些Java进程

时间:2011-02-17 15:59:43

标签: process java jvisualvm

我想获得某个Java进程的堆转储(可疑的内存泄漏)。但是,当我启动jvisualvm工具时,我看不到任何正在运行的Java进程。

我已经谷歌了解了这一点,并且已经发现了一些文章说你必须使用与启动jvisualvm工具相同的JDK来运行Java进程,以便能够看到它们。但是,据我所知,情况已经如此。我在本地做所有事情(我可以​​远程访问机器)。

需要考虑的几件事情:

  1. 进程在防火墙的Windows 2008服务器上运行
  2. 使用重命名的版本的JDK java.exe可执行文件
  3. 运行进程
  4. 据我所知,进程正在使用1.6.0_18 JDK
  5. 运行
  6. 其中一个正在运行的进程启动RMI注册表
  7. 我正在等待服务器的虚拟副本,所以我可以搞砸它(这是一个生产服务器)。但与此同时;关于为什么我在jvisualvm(或jconsole)中看不到任何进程的任何想法?

2 个答案:

答案 0 :(得分:53)

在我做了一点研究之后,看来彼得的评论是正确的。由于JVM进程是由另一个用户启动的(NETWORK SERVICE帐户,因为它们是由Windows服务启动的),因此它们没有显示在jvisualvm中。

解决方法

由于我可以访问应用程序配置,因此我找到了以下解决方法,其中涉及为目标JVM显式启用不安全的JMX:

  1. 添加以下JVM参数:

    -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

  2. 点击文件 - >使用JMX将远程进程添加到jvisualvm添加JMX连接。您可以使用端口3333连接到该进程。显然,您可以根据需要更改端口。

  3. 链接到更详细解释此内容的文章http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html

    注释

    1. 永久保留JVM设置可能,因为它们允许任何人通过JMX连接到JVM。
    2. 如果需要,您还可以向JMX JVM参数添加身份验证。

答案 1 :(得分:2)

最简单的方法是以管理员身份执行jvisualvm (胜利:"以管理员身份运行")。哪个不理想但有效。那么所有的Java进程都是可见的。