【问题标题】:VisualVM unable to sampler memoryVisualVM 无​​法对内存进行采样
【发布时间】:2012-02-06 16:00:46
【问题描述】:

我有一个配置了 JMXRemote 参数的 tomcat 实例。本地 VisualVM 能够在 CPU 上获取采样器,但不能用于内存。内存按钮显示为灰色,并显示以下摘要:“内存采样:不可用。无法连接到目标应用程序。确保应用程序在受支持的 JDK 6 或 JDK 7 上运行”

JMXRemote 参数:

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

Tomcat JDK 版本:

JDK1.6.0.30

VisualVM 版本:

Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e
System: Windows Server 2008 R2 (6.1) , amd64 64bit
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode)
Vendor: Sun Microsystems Inc., http://java.sun.com/
Environment: Cp1252; en_US (visualvm)
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler

Tomcat 版本:

Tomcat 6.0.32

我在 win server 2008 上同时运行 VisualVM 和 Tomcat。我做错了什么吗?

【问题讨论】:

  • 蟹...你是对的,我发布了错误的信息。让我用同一个 JDK 再次测试一下
  • VisualVM 非常特定于版本。我认为它仍处于相当快速的发展阶段。
  • 对我来说,以 sudo 用户的身份盯着 visualvm 解决问题...

标签: java profiling visualvm


【解决方案1】:

我会检查 VisualVM 的版本是否与 JVM 完全相同。

VisualVM 非常特定于版本。我认为它仍处于相当快速的发展阶段。

(重新发布为答案,因为它可能是解决方案)

【讨论】:

    【解决方案2】:

    我在 JVisualVM 上遇到过类似的问题,我什至问过一个关于它的问题 here

    一些见解/建议:

    1. 因此,为了对内存进行采样,您不需要 jmx 选项。
    2. 我会仔细检查您是否在同一台机器上安装了 64 位 jvm 和 32 位 jdks(即使它们没有运行并且所有环境变量都已正确定义),我有时在某处读过它让 JVisualVM 疯狂:)(是的,我知道这对我们来说听起来不合理,java 开发人员)

    3. 如果它不起作用,只需卸载您拥有的所有 jdk 并仅安装您需要的 1 个。它可以解决问题。

    我希望它能帮助你解决问题,毕竟就像彼得说的这些东西是新的和不断发展的

    【讨论】:

    • 1) 如果我删除 jmx,本地在 VisualVM 应用程序面板下仅显示 1 项“VisualVM” 2) 只有 1 个 JDK 1.6.0_26,我认为服务器与 JRE6 一起开始和。我今天安装了 JDK 1.6.0_30,看看新的 JDK 是否有帮助。 3)我会试试看会发生什么
    【解决方案3】:

    This blog post 让我相信 JVisualVM 和 Tomcat 的临时目录需要相同才能使内存采样工作。帖子中的一位cmet:

    临时目录必须设置为 JVisualVM 使用的目录,可以从 VisualVM 系统属性选项卡 (java.io.tmpdir) 中找到该目录。一旦我正确设置了 CATALINA_TMPDIR 目录,它就可以很好地工作了。

    【讨论】:

    • 我相信只有 CPU 采样可以远程完成。对于内存采样,您可以尝试在远程机器上运行 visualvm 并使用 X11 转发来查看它,如果可能的话。
    • 我尝试将 Tomcat Windows 服务和 visualvm 的临时目录对齐为 C:\Windows\Temp,但我仍然在 visualvm 视图中收到消息“不支持此 JVM”。
    【解决方案4】:

    我之前也遇到过同样的问题。 你应该是从 jvisualvm 主页下载的版本吧? 不要这样做! 如果您使用新的 jdk 1.7,VisualVM 已经打包在您的 jdk 文件夹中。 使用这个版本,内存样本不会有任何问题。

    【讨论】:

    • 这对我有用。如果使用 jdk 1.7,visualvm 已经是 bin/ 中 jdk 的一部分。这使得内存采样工作。
    【解决方案5】:

    这是我对类似问题的解决方案:https://stackoverflow.com/a/16330238/715483

    您可以通过以下方式解决此错误

    $ ssh -Y user@remotemachine

    $ wget http://java.net/projects/visualvm/downloads/download/release135/visualvm_135.zip

    $ unzip visualvm_135.zip

    $ cd visualvm_135/bin

    $ ./visualvm

    此 visualvm 实例将功能齐全,包括内存和 CPU 采样。

    在此处了解更多信息:http://shahriarinia.blogspot.com/2013/05/java-cpumemory-heap-usage-monitoring.html

    http://mshahriarinia.com/

    【讨论】:

      【解决方案6】:

      如果您的 JRE 是,请确保您的 VirtualVM/JDK 是 32 位副本。如果您使用的是 Eclipse,请检查已安装 JRE 部分中选择的 JRE。

      【讨论】:

        【解决方案7】:

        我也有同样的问题。

        我总是将tomcat作为服务启动,并通过jmx连接将它与visualvm连接起来。

        何时更正了 catalina.bat:

            set JAVA_OPTS=%JAVA_OPTS% 
            -Dcom.sun.management.jmxremote=true 
            -Dcom.sun.management.jmxremote.port=9090 
            -Dcom.sun.management.jmxremote.ssl=false 
            -Dcom.sun.management.jmxremote.authenticate=false
        

        并用startup.bat启动,visualvm自动判断tomcat,内存采样处于活动状态。

        【讨论】:

          【解决方案8】:

          我有同样的问题,但环境不同。我的服务器是 Linux 机器,客户端是 Windows 7 机器,但问题是一样的。

          解决方案是在同一台机器上使用运行目标应用程序的同一用户启动 jvisualvm。如果我与其他用户(例如:root)一起运行 jvisualvm,则内存按钮变为灰色。

          【讨论】:

            【解决方案9】:

            我刚刚遇到了同样的问题,上面的答案解决了我的问题,但我花了一段时间才弄清楚如何。以防万一其他人仍然遇到问题并最终陷入困境,我使用的是 JDK,它是通过 Eclipse 配置的 weblogic 服务器的一部分,而不是我单独安装的 JDK。我仍然是一名初级程序员,直到我开始查看我的 Eclipse 设置并验证我已安装的 JRE,我才将 2 和 2 放在一起。

            从 weblogic jdk 运行 jvisualvm.exe,一切正常。

            【讨论】:

            • 您还可以通过如下命令指定要使用的 JDK:visualvm --jdkhome "C:\Program Files\Java\jdk-11.0.2"
            【解决方案10】:

            首先,JMX should be enabled。如果还没有,请添加激活 JMX 所需的链接命令行环境变量。

            环境变量CATALINA_TMPDIR 应设置为与本地> VisualVM 的“系统属性”选项卡中所见的JVisualVM 匹配。您可以通过双击左侧“应用程序”窗格中标记为“VisualVM”的条目来打开它。

            环境变量可以通过搜索环境“edit environment variables for your account”来设置。新建... > 输入名称和值。

            如果您希望 VisualVM 的临时目录位于其他位置,则必须从命令行启动 VisualVM 并添加参数。

            C:\Program Files\Java\jdk1.8.0_65\bin>jvisualvm.exe -J-Djava.io.tmpdir=C:\Users\You\Temp
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-06-30
              • 1970-01-01
              • 2013-01-04
              • 1970-01-01
              • 1970-01-01
              • 2015-01-10
              • 2023-03-11
              • 1970-01-01
              相关资源
              最近更新 更多