【问题标题】:Inspecting a java application which has been started with -javaagent using VisualVM使用 VisualVM 检查以 -javaagent 启动的 java 应用程序
【发布时间】:2011-08-31 18:28:26
【问题描述】:

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

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

【问题讨论】:

  • 也许 Eclipse 链接代码检测与 VisualVM 配合得很好??
  • 你确定这是连接到 -javaagent 标志吗?其他 java 应用程序的监控工作正常吗?
  • Tomas,是的,它工作正常,直到我使用 -javaagent 启动应用程序。正如彼得所说,我怀疑这是因为 eclipselink 正在“编织” - 这正在改变类的字节码 - 而这不适用于 visualvm。

标签: java visualvm javaagents


【解决方案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->Add JMX 连接附加到您的应用程序 并使用“localhost:”作为连接字符串。

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

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

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

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-05-25
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    相关资源
    最近更新 更多