6

我已经仔细检查了以下内容:

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

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

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

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

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

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

4

1 回答 1

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

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

于 2011-08-07T09:53:50.813 回答