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

Edd*_*die 6 java monitoring tomcat visualvm

我仔细检查过以下内容:

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

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

我确实在"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.

Tom*_*rka 3

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

jps -J-Djps.debug=true -J-Djps.printStackTrace=true
Run Code Online (Sandbox Code Playgroud)

并发布输出。这可以向我们展示为什么 jvmstat 无法从 Tomcat 读取信息。