我仔细检查过以下内容:
通过所有这些,我做在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。
答案 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中读取信息。