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

发布于 2024-12-02 11:39:53 字数 403 浏览 2 评论 0原文

我正在尝试使用 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 查看程序时,我在“监视器”页面上看不到任何内容。

不幸的是,VisualVM 文档站点(位于 VisualVM.java.net )似乎已关闭。

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

I am trying to inspect an java application using VisualVM. Normally there is no problem but I am trying to set up Eclipselink weaving and so I am starting the program using the -javaagent flag;

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

When I look at the program using Viusal VM I can see nothing on the Monitor page.

Unfortunately the VisualVM docs site (at visualvm.java.net ) seems to be down.

Thanks to anyone who can help me understand what I am doing wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

司马昭之心 2024-12-09 11:39:53

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

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

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

在预定义端口上的受监控应用程序中显式启用 JMX

-Dcom.sun.management.jmxremote.port=<portNum>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

1) 您可以通过文件 -> 添加 JMX 连接从 VisualVM 连接到您的应用程序,并
并使用“localhost:”作为连接字符串。

2)可以调大超时时间;

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

VisualVM 还有一个日志文件,可通过“帮助”->“关于”->“日志文件”获取,其中显示已引发的任何异常。在这里我找到了超时的堆栈跟踪......

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)

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

Thanks to Tomas Hurka of Oracle I can answer this question.

The problem is caused by a timeout between when the jvm is detected and when it is initialized by jvmstat (http://java.sun.com/performance/jvmstat/). With weaving turned on this interval obviously increased.

There are 2 ways to fix this.

1) you can explicitly enable JMX in monitored application on predefined port with

-Dcom.sun.management.jmxremote.port=<portNum>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

and from VisualVM attach to your application via File->Add JMX connection
and use "localhost:" as a connection string.

2) You can up the timeout;

a) In the visualvm /etc directory (e.g. visualvm_132\etc) edit the defaults_opts setting in visualvm.conf so that -J-Dsun.jvmstat.perdata.syncWaitMs=10000 is increased as necessary ( I increased it *10 to 100 seconds)

VisualVM also has a log file available through Help->About->Log file which shows any exceptions which have been thrown. In here I found the stack trace of the timeout...

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)

Thanks again to Tomas. He should get any points from this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文