21

I tried to run JConsole to analyze the memory used by a running process, but JConsole doesn't show me processes even though I am absolutely sure that one is running (in addition to that it should show JConsole in the process list as well but it doesn't).

Does anyone have an idea why it doesn't show any processes?

Cheers

4

8 回答 8

17

在窗口提示符下,运行 echo %TMP%,它将为您提供默认的临时目录。转到该目录并找到名为 hsperfdata_ user的目录,其中user是您的登录名。这是存储进程 ID 的目录。您创建的任何新进程(例如 java 应用程序)都会有一个以进程 ID 命名的新文件。Jconsole 将从该目录中获取进程 ID。如果您无法在此目录中创建文件,则意味着您需要更改权限才能允许写入。完成后,启动一个新的 java 应用程序以查看新的进程 id 文件是否在目录中。确认后,启动 jconsole

于 2013-10-18T18:44:33.833 回答
14

我也有同样的问题。但是如果我明确指定 PID,如 中jconsole 1234,jconsole 能够分析进程。

于 2013-03-21T15:58:26.577 回答
9

如果您在 Windows 上运行 jconsole - 只需:

  1. 找到jconsole.exe
  2. 右键单击它
  3. 选择以管理员身份运行
于 2018-01-04T16:21:14.263 回答
3

就我而言,删除hsperfdata_USERNAME目录(在%TMP%目录中)并关闭所有 JVM 有帮助。

于 2014-12-04T13:13:47.823 回答
1

当受监控的 JVM 和监控工具(JConsole/JMC/Java Mission Control,甚至可能是 VisualVM)的 %TMP% 值不同时,就会发生这种情况。这可能是 Cygwin 的标准场景(至少在我的情况下:Cygwin+Babun)最简单的解决方案是将 TMP 环境变量的值设置为 Windows 使用的默认值,至少在 shell 启动 JVM 的范围内。

于 2014-09-08T22:52:07.313 回答
1

您必须使用与您要分析的进程相同的用户启动 jconsole。

于 2016-12-25T07:29:27.033 回答
1

刚碰到这个问题

如果您有机会使用多个 jdk(例如 SDKMAN),请确保jconsole使用与应用程序相同的 jdk 运行

于 2020-03-11T02:10:28.457 回答
0

8 年后......我遇到了同样的问题。我只能看到某些进程,但无法看到和监视在 Linux 的 docker 容器中运行的任何 java 进程。

受RoyalBigMack的 Windows 解决方案的启发:

  • su解决方案1.以超级用户(命令)运行终端并运行jconsole
  • 解决方案 2. 将解决方案 1 作为一个命令运行,sudo jconsole

只有第一个解决方案对我有用,一旦 jconsole UI 弹出 - 现在所有隐藏的进程都是可见的。

于 2020-09-17T18:36:59.100 回答