【问题标题】:Simple tool to monitor a Tomcat server using JMX使用 JMX 监控 Tomcat 服务器的简单工具
【发布时间】:2012-06-15 19:44:57
【问题描述】:

我是一名计算机科学专业的学生,​​目前正在实习。我的老板让我编写一个简单的工具来监控 Tomcat 服务器。我刚刚开始这个项目,所以我基本上只是在玩弄看看事情是如何运作的。我想创建一个简单的 jsp 页面来显示一些基本 JMX 查询的结果。我正在使用 Eclipse IDE。有人可以给我一些入门提示吗?

【问题讨论】:

  • Stack Overflow 不是研究助理:meta.stackexchange.com/a/128553/152851
  • 这是一个真正使用的应用程序,还是只是一个测试,看看你有多好?如果这不是测试,请将 JConsole 展示给你的老板 ;-)

标签: eclipse tomcat jmx


【解决方案1】:

在这里,您绝对不必重新发明轮子。您可以从 JDK 附带的 jconsole 开始:只需运行 jconsole [pid]jconsole 将连接到(本地)运行的进程,并让您通过 JMX 观察一切。

如果您想要远程访问 JMX 公开的信息,您可以使用 Tomcat 的 manager webapp 以及包含的 jmxproxy servlet,它允许您远程执行简单的查询来获取(和设置)JMX 属性。

还有其他功能更齐全的项目,例如 Jolokia (http://www.jolokia.org/),它们可以做类似的事情。

假设您使用 Nagios 之类的工具来自动观察您的 Tomcat 实例,您肯定不想这样做,它会启动 JVM 并建立远程(甚至本地)JMX 连接来检查单个 JMX 属性(然后这样做 5 次以观察 5 种不同的特性,然后每 5 分钟或 1 分钟或其他方式进行这 5 个样本)。相反,您可能希望使用上述代理。

我们已经成功地将 Nagios 与 Tomcat 管理器的 jmxproxy servlet 结合起来。它可能会在很长一段时间内满足您的需求。

【讨论】:

  • OP 提到他正在尝试创建一个 JSP 页面来显示 JMX 输出。 jconsole 不能这样做,jmxproxy 仅显示本地 JMX 信息,如果我正确阅读文档则不显示远程。
  • @Gray 我提到了 jconsole,因为它功能相当齐全。如果 OP 想要编写一个“简单的”JSP(哈哈),他会感到惊讶,因为现在该任务将变得不简单。 jmxproxy 在 Tomcat 内部运行,并为 JMX 提供 HTTP 接口。因此,您可以远程查询本地获取的 JMX 属性。
  • 哦,毫无疑问,任务不简单。 :-)
  • 感谢您的回复。我已经玩了一会儿,发现这不是我能做的事情……我完全坦率地说,我只是在摸索,尽我所能。基本上,我的任务是编写一个“Healthcheck”程序来监控在 Tomcat 服务器上运行的一些程序。您认为哪些具体挑战使这项任务“不简单”?
  • @Phaedrus 当然。让我清理一下,然后将其发布到 Tomcat wiki。
【解决方案2】:

就以编程方式使用 JMX 而言,有许多客户端类。这是我的SimpleJMX project。有了它,您可以使用JmxClient 对象连接和询问远程JVM:

JmxClient client = new JmxClient("remote.sever.name", remotePortNumber);
Set<ObjectName> objectNameSet = client.getBeanNames();
...

这里是javadocs for JmxClient

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多