我尝试运行JConsole来分析正在运行的进程使用的内存,但JConsole并没有向我显示进程,即使我绝对确定正在运行(除了它应该在进程列表中显示JConsole)好吧,但它没有。)
有没有人知道它为什么不显示任何进程?
干杯
答案 0 :(得分:14)
在窗口提示符下,运行echo%TMP%,它将为您提供默认的临时目录。转到该目录并找到名为hsperfdata_的目录,其中是您的登录名。这是存储您的进程ID的目录。您创建的任何新进程(如java应用程序)都将具有由进程ID命名的新文件。 Jconsole将从此目录中获取进程ID。如果您无法在此目录中创建文件,则表示您需要更改权限才能允许写入。完成后,启动一个新的java应用程序,看看是否在dir中有新的进程id文件。确认后,启动jconsole
答案 1 :(得分:10)
我有同样的问题。但是如果我明确指定PID,就像在jconsole 1234
中一样,jconsole能够分析过程。
答案 2 :(得分:4)
如果您在Windows上运行jconsole - 只需:
答案 3 :(得分:3)
就我而言,删除hsperfdata_USERNAME
目录(在%TMP%
目录中)并关闭所有JVM都有帮助。
答案 4 :(得分:1)
当受监视的JVM和监视工具(JConsole / JMC / Java Mission Control,甚至可能是VisualVM)的%TMP%值不同时,会发生这种情况。 这可能是Cygwin的标准场景(至少在我的情况下:Cygwin + Babun) 最简单的解决方案是将TMP环境变量的值设置为Windows使用的默认值,至少在shell启动JVM的范围内。
答案 5 :(得分:0)
您必须使用与要分析的进程相同的用户启动jconsole。
答案 6 :(得分:0)
刚遇到这个问题
如果您偶然使用多个jdk(例如SDKMAN),请确保使用与应用程序相同的jdk运行jconsole
答案 7 :(得分:0)
8年后...我遇到了同样的问题。我只能看到某些进程,但是看不到和监视Linux中的Docker容器中运行的任何Java进程。
受RoyalBigMack的the Windows solution启发:
su
命令)并运行jconsole
sudo jconsole
只有第一个解决方案对我有用,并且一旦jconsole UI弹出,所有隐藏的进程现在都可见。