监控Java Web应用程序 - JMX是正确的选择吗?

12
我们有一个Java web应用程序,我们希望设置一些基本的监控,并计划以后扩展这些监控。我们的计划如下:
(1) 收集关于运行应用程序的web容器的虚拟机的通用信息(例如内存和线程)。
(2) 监控应用程序的“状态”。 这比较模糊,但至少我们想知道Web应用程序是否仍然存活并能够响应请求。
(3) 将来,我们希望收集更多特定于我们的应用程序的信息。 同样,这也很模糊,但可以假设我们可能希望将应用程序内部收集的某些统计信息提供给支持人员。
通常,Web应用程序将部署在Tomcat 5.5或6环境中。 在网上快速搜索后发现,可以为Tomcat启用JMX,然后可以使用JConsole连接到服务器。 这给了我们许多基本信息,解决了第(1)点。 此外,在“Catalina”的MBeans部分中可以获得一些信息,并钻取其中,例如可以看到某个Servlet收到了多少个请求。 这不完全符合我们对第(2)项的要求,但至少给我们提供了一些信息。 那里似乎有很多信息,但使用JConsole难以解释。 也许有更好的工具可以解释Tomcat公开的MBeans。

对于第(3)点,乍一看似乎我们可以编写自己的MBeans并将其提供给类似JConsole这样的工具。就我个人而言,这需要我学习有关JMX的知识,这是我很乐意做的,但我有一个顾虑。经过查找,我发现该主题的大多数教科书都已经好几年没有更新了,开源工具似乎也缺乏最新的更新。因此我的主要问题很简单。您对JMX有何意见?它是否有未来,或者它/已被其他东西取代?考虑到我们已经拥有了Web应用程序,但我们正在从头开始为管理控制台构建,我们应该选择JMX还是有更合适且前景更好的东西?

我问这个问题并没有自己的利益,我只是想听听您的意见和经验。我相信没有一个正确的答案,但我认为进行有知情的讨论会很有用。

提前感谢,

亚当。

2个回答

9
JMX在这里绝对是一个好的解决方案。我不会担心它被遗弃。我最近为大多数企业工作时,他们使用(或计划使用)JMX,并且在Java世界中选择其他东西之前,我需要听到非常有说服力的论据。很容易编写客户端(监控解决方案),您可以轻松地返回复杂数据。大多数第三方组件也支持通过JMX进行监视。
请注意,您可能还希望考虑与任何现有管理解决方案(例如Nagios、BNC Patrol、HP Openview等)的集成。他们可能不那么了解Java,而更喜欢像简单的HTTP连接性测试一样的测试来测试网站是否正常运行(使用Nagios很容易),或者使用SNMP进行集成(Openview本地支持)。

1
谢谢。很高兴听到您对JMX未来的积极看法! - Adam

1
如果适用于您的情况(Java 6更新10 JDK或更高版本,并且在同一台机器上),那么考虑使用jvisualvm,因为它可以比JConsole更深入地挖掘。

您可能会发现,最简单的方法是使用jvisualvm的插件来满足您的需求,了解您的应用程序。


@ThorbjørnRavnAndersen说:“如果您能在与容器相同的主机上运行visualvm,那么您的生活将变得更加轻松,因为这样可以访问未经准备的JVM。”但实际上这不会减慢事情吗?我认为远程分析非常有帮助,因为分析器本身可能需要很长时间,并且这会增加总时间。您所说的“未经准备的JVM”和“对JVM的咒语”具体是什么意思? - Geek
@Geek 大多数调试和分析 Java 技术需要以特定方式启动 JVM。您无法(尚未)在已启动的 JVM 上启用调试。JVisualVM 可以附加到正在运行的程序并对其进行分析 - 非常有帮助。 - Thorbjørn Ravn Andersen
@ThorbjørnRavnAndersen 好的,我明白了,但是远程分析不是更好吗? - Geek
@geek 取决于你对“更好”的定义。如果主机有足够的资源,那么自然可以。 - Thorbjørn Ravn Andersen
@geek 也要考虑自己的实验,这样你就可以亲身体验各种选项。 - Thorbjørn Ravn Andersen
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接