【问题标题】:JConsole can't find processJConsole 找不到进程
【发布时间】:2012-12-06 15:13:54
【问题描述】:

我尝试运行 JConsole 来分析正在运行的进程使用的内存,但 JConsole 没有显示进程,即使我绝对确定某个进程正在运行(此外它应该在进程列表中显示 JConsole好吧,但事实并非如此)。

有人知道为什么它不显示任何进程吗?

干杯

【问题讨论】:

    标签: jconsole


    【解决方案1】:

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

    【讨论】:

    • 如果 java 进程是从 cygwin 启动的,它将有一个与预期不同的 TEMP 文件夹 - jconsole,从资源管理器启动时不会找到该进程。
    • 谢谢詹姆斯!修复权限对我有用! :)
    • 来自 cygwin 提示符,需要 export TMP=/cygdrive/C/Users/xxx/AppData/Local/Temp
    • 在大多数情况下,以管理员身份运行 JConsole 就可以解决问题
    • 这个答案也帮助了我使用 VisualVM。所以任何有在 Visualvm 的应用程序列表中没有显示本地进程问题的人也应该试试这个。
    【解决方案2】:

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

    【讨论】:

    • 你能提供更多关于你如何做到这一点的细节吗?
    • @SteveWestbrook,打开一个终端,而不是运行“jconsole”,而是运行“jconsole 1234”,其中 1234 是您的 Java 进程的 PID。现在关于如何找到你的 Java 进程的 PID,你可以通过 Windows 中的任务管理器或在 Linux 中运行“ps ax”来完成。..
    【解决方案3】:

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

    1. 查找 jconsole.exe
    2. 右键单击它
    3. 选择以管理员身份运行

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 即使我从同一个用户运行我仍然无法运行 jconsole。
          • 试过了,jconsole还是看不到我的进程
          【解决方案7】:

          刚遇到这个问题

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

          【讨论】:

            【解决方案8】:

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

            灵感来自the Windows solution by RoyalBigMack:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-12-07
              • 1970-01-01
              • 2011-07-13
              • 2014-09-22
              • 2020-09-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多