VisualVM无法取样内存

时间:2012-01-10 07:32:50

标签: java profiling visualvm

我有一个配置了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。我做错了什么?

10 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

This blog post让我相信JVisualVM和Tomcat的临时目录需要相同才能使内存采样工作。关于这篇文章的评论之一:

  

必须将temp目录设置为JVisualVM使用的目录,可以从VisualVM系统属性选项卡(java.io.tmpdir)中找到该目录。一旦我正确设置了CATALINA_TMPDIR目录,这就非常有效。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

我刚遇到同样的问题,上面的答案解决了我的问题,但我花了一段时间才弄明白。为了防止其他人仍然遇到麻烦并最终在线程中结束,我使用的JDK是通过Eclipse配置的weblogic服务器的一部分,而不是我单独安装的JDK。我还是一名初级程序员,在我开始查看我的eclipse设置并验证我的已安装JRE之前,我并没有将2和2放在一起。

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

答案 4 :(得分:0)

我遇到过与JVisualVM类似的问题,我甚至问了一个关于它的问题here

一些见解/建议:

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

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

  4. 我希望它会帮助你解决这个问题,毕竟彼得说这些事情是新的和不断发展的

答案 5 :(得分:0)

以下是针对类似问题的解决方案: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 :(得分:0)

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

答案 7 :(得分:0)

我有同样的问题。

我总是将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 :(得分:0)

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

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

答案 9 :(得分:0)

首先,JMX should be enabled。添加尚未激活JMX所需的链接命令行环境变量。

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

可以通过搜索环境,“为您的帐户编辑环境变量”来设置环境变量。新建...>输入名称和值。

enter image description here

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

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