如何使用jvisualvm监控Tomcat,显示visualgc?

时间:2011-08-05 23:23:03

标签: java tomcat monitoring visualvm

我仔细检查过以下内容:

  • 我在运行Tomcat的同一个盒子上运行jvisualvm。
  • 这是Java 6u19。
  • 我的Tomcat服务是以我登录的用户身份运行的。
  • 我的Tomcat服务正在使用与我使用的jvisualvm完全相同的JVM目录。
  • Tomcat在特定端口上启用了JMX,但我认为这对我没有帮助。

通过所有这些,我在jvisualvm的“Local”列表中查看我的Tomcat进程。它显示为“<未知应用程序>(pid 5644)”。如果我双击它,则每个选项卡都显示“此JVM不支持”。但是,VisualVM显示在“Local”中,并且所有选项卡都适用于它,显然使用相同的JVM实例。没有明显的方法可以将JMX连接添加到“<未知应用程序>”实例

我确实在“Local”中看到Tomcat的JMX实例为“localhost :(我的端口号)”,这样可行,但Visual GC选项卡显示“此JVM不支持”,我认为这意味着Visual GC不能通过JMX工作。

我做错了什么?我试过启动jstatd。它没有任何区别。当我启动jstatd时,visualvm会看到“Local”“jstatd”,但是当我双击它时,它似乎只是监视jstatd进程而不是任何其他Java进程。

注意:我决定尝试不作为服务运行Tomcat,而是直接在CMD窗口中运行,而中提琴,现在visualvm完美运行。当我运行“jps”并得到投诉“进程信息不可用”时,我想我会尝试这一点,并用Google搜索并发现有人说他们在运行任何Java应用程序作为服务时都得到了这个。这有助于测试平台,但无助于弄清楚如何监控生产系统。

这是在Windows Server 2003上的Tanuki包装器下作为Windows服务运行的Tomcat。

1 个答案:

答案 0 :(得分:3)

从您的描述可以清楚地看出Jvmstat在某种程度上被打破了。 Jvmstat由Visual GC,jps和VisualVM使用。您在“本地”节点下将Tomcat视为无法识别的应用程序的原因意味着VisualVM检测到(通过jvmstat)存在正在运行的Java应用程序,但它无法获取有关它的任何数据。这可能与您将Tomcat作为Windows服务运行这一事实联系在一起。您可以尝试退出所有Java应用程序并删除位于%TMP%目录中的hsperfdata_ {your_user_name}目录,然后重新启动Tomcat和VisualVM。如果在“本地”节点下正确识别Tomcat,Visual GC也将起作用。如果失败,请启动Tomcat并使用以下命令运行jps:

jps -J-Djps.debug=true -J-Djps.printStackTrace=true

并发布输出。这可以告诉我们,为什么jvmstat无法从Tomcat中读取信息。