使用 VisualVM 检查已通过 -javaagent 启动的 java 应用程序
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
感谢 Oracle 的 Tomas Hurka,我可以回答这个问题。
该问题是由检测到 jvm 和由 jvmstat (http://java.sun.com/performance/jvmstat/) 初始化 jvm 之间的超时引起的。打开编织后,这个间隔明显增加。
有两种方法可以解决这个问题。
在预定义端口上的受监控应用程序中显式启用 JMX
1) 您可以通过文件 -> 添加 JMX 连接从 VisualVM 连接到您的应用程序,并
并使用“localhost:”作为连接字符串。
2)可以调大超时时间;
a) 在 VisualVM /etc 目录中(例如 VisualVM_132\etc)编辑 VisualVM.conf 中的 defaults_opts 设置,以便根据需要增加 -J-Dsun.jvmstat.perdata.syncWaitMs=10000 (我将其增加 *10 到 100 秒)
VisualVM 还有一个日志文件,可通过“帮助”->“关于”->“日志文件”获取,其中显示已引发的任何异常。在这里我找到了超时的堆栈跟踪......
再次感谢托马斯。他应该从中得到一些分数
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
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...
Thanks again to Tomas. He should get any points from this