使用VisualVM检查已使用-javaagent启动的java应用程序

时间:2011-08-31 18:28:26

标签: java visualvm javaagents

我正在尝试使用VisualVM检查java应用程序。通常没有问题,但我正在尝试设置Eclipselink编织,所以我使用-javaagent标志启动程序;

-Xms1024m -Xmx1582m -Xshare:off  -javaagent:C:\Users\Administrator\.m2\repository\org\eclipse\persistence\eclipselink\2.3.0-M7\eclipselink-2.3.0-M7.jar

当我使用Viusal VM查看程序时,我在Monitor页面上看不到任何内容。

不幸的是,VisualVM文档站点(在visualvm.java.net上)似乎已经失效。

感谢所有能帮助我理解我做错事的人。

1 个答案:

答案 0 :(得分:1)

感谢Oracle的Tomas Hurka,我可以回答这个问题。

问题是由检测到jvm和jvmstat(http://java.sun.com/performance/jvmstat/)初始化之间的超时引起的。随着编织开启,这个间隔明显增加。

有两种方法可以解决这个问题。

1)您可以使用

在预定义端口上的受监视应用程序中显式启用JMX
-Dcom.sun.management.jmxremote.port=<portNum>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

并从VisualVM通过File-&gt;添加JMX连接附加到您的应用程序 并使用“localhost:”作为连接字符串。

2)你可以延长超时时间;

a)在visualvm / etc目录(例如visualvm_132 \ etc)中编辑visualvm.conf中的defaults_opts设置,以便根据需要增加-J-Dsun.jvmstat.perdata.syncWaitMs = 10000(我将其增加* 10到100秒)

VisualVM还有一个日志文件可通过Help-&gt; About-&gt;日志文件获得,该文件显示已抛出的任何异常。在这里,我找到了超时的堆栈跟踪...

INFO [com.sun.tools.visualvm.jvmstat.JvmstatModelProvider]: Could not get MonitoredVM
sun.jvmstat.monitor.MonitorException: Could not synchronize with target
   at sun.jvmstat.perfdata.monitor.v2_0.PerfDataBuffer.synchWithTarget(PerfDataBuffer.java:262)

再次感谢托马斯。他应该从这个

获得任何积分