【发布时间】:2012-12-06 15:13:54
【问题描述】:
我尝试运行 JConsole 来分析正在运行的进程使用的内存,但 JConsole 没有显示进程,即使我绝对确定某个进程正在运行(此外它应该在进程列表中显示 JConsole好吧,但事实并非如此)。
有人知道为什么它不显示任何进程吗?
干杯
【问题讨论】:
标签: jconsole
我尝试运行 JConsole 来分析正在运行的进程使用的内存,但 JConsole 没有显示进程,即使我绝对确定某个进程正在运行(此外它应该在进程列表中显示 JConsole好吧,但事实并非如此)。
有人知道为什么它不显示任何进程吗?
干杯
【问题讨论】:
标签: jconsole
在窗口提示符下,运行 echo %TMP%,它将为您提供默认的临时目录。转到该目录并找到名为 hsperfdata_user 的目录,其中 user 是您的登录名。这是存储进程 ID 的目录。您创建的任何新进程(例如 java 应用程序)都会有一个以进程 ID 命名的新文件。 Jconsole 将从该目录中获取进程 ID。如果您无法在此目录中创建文件,则意味着您需要更改权限才能允许写入。完成后,启动一个新的 java 应用程序以查看新的进程 id 文件是否在目录中。确认后,启动 jconsole
【讨论】:
export TMP=/cygdrive/C/Users/xxx/AppData/Local/Temp
我也有同样的问题。但是如果我明确指定 PID,如jconsole 1234,jconsole 就能够分析进程。
【讨论】:
如果您在 Windows 上运行 jconsole - 只需:
【讨论】:
就我而言,删除 hsperfdata_USERNAME 目录(在 %TMP% 目录中)并关闭所有 JVM 会有所帮助。
【讨论】:
当受监控的 JVM 和监控工具(JConsole/JMC/Java Mission Control,甚至可能是 VisualVM)的 %TMP% 值不同时,就会发生这种情况。 这可能是 Cygwin 的标准方案(至少在我的情况下:Cygwin+Babun) 最简单的解决方案是将 TMP 环境变量的值设置为 Windows 使用的默认值,至少在 shell 启动 JVM 的范围内。
【讨论】:
您必须使用与您要分析的进程启动时相同的用户来启动 jconsole。
【讨论】:
刚遇到这个问题
如果您有机会使用多个 jdk(例如 SDKMAN),请确保 jconsole 使用与应用程序相同的 jdk 运行
【讨论】:
8 年后...我遇到了同样的问题。我只能看到某些进程,但无法看到和监视在 Linux 的 docker 容器中运行的任何 java 进程。
灵感来自the Windows solution by RoyalBigMack:
su 命令)并运行jconsole
sudo jconsole
只有第一个解决方案对我有用,一旦 jconsole UI 弹出 - 现在所有隐藏的进程都可见。
【讨论】: