2

我正在尝试使用 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 )似乎已关闭。

感谢任何可以帮助我理解我做错了什么的人。

4

1 回答 1

2

感谢 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

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

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

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

VisualVM 也有一个日志文件,可以通过 Help->About->Log file 获得,它显示了任何已经抛出的异常。在这里我找到了超时的堆栈跟踪......

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)

再次感谢托马斯。他应该从中得到任何分数

于 2011-09-01T11:54:54.110 回答