你在生产Java应用程序中使用JMX监控什么?

32

这个问题不是关于JMX的工作原理或JMX所做的事情。这个问题是关于在生产环境中使用JMX的应用程序服务器的应用。它也不是针对特定的服务器。

在运行Java EE服务标准堆栈的生产环境中,您使用JMX监视什么内容:数据库访问(JDBC和JPA)、会话EJB、JMS、Web服务器、Web服务、启用AJAX的服务?

5个回答

30

JVM级别,我监测每分钟的垃圾回收时间。

Servlet容器级别,我监测请求数量,异常数量(4xx和5xx代码),每分钟请求持续时间之和。

SOAP级别,我监测每个操作和每分钟调用的次数、异常次数和调用总次数。

Web MVC框架级别,我监测每个动作和每分钟调用的次数、异常次数和调用总次数。

对于池(数据源、线程池/执行器服务),我监测活动计数。

对于JMS连接,我监测每分钟发送和接收的消息数量以及活动接收器的数量。

对于EhCache,我监测缓存中的条目数量,每分钟的命中率和未命中率。

业务应用程序级别,我开发了@Profiled注释来监测每分钟的调用次数、异常次数和总持续时间。

如果您对此类指标感兴趣,我们开发了许多JMX附加功能(dbcp、util.concurrent、jms、@profiled注释),并将所有这些与Spring XML命名空间基于配置打包,Hyperic HQ插件,监视jsp页面等。

详细信息请参见:http://code.google.com/p/xebia-france/wiki/XebiaManagementExtras

所有这些代码都在商业友好的开源Apache Software License 2下许可,部署在Maven中央仓库,可作为jar下载,并在Google Code子版本控制器上提供,以便根据您的需要进行集成。

希望这可以帮助到您,

Cyrille(Xebia)


8

我使用JMX来暴露一个MBean,可以动态地调整Log4J Logger的级别。这对于我们不想在所有节点上修改log4j配置文件以更改指定记录器的日志级别的集群应用程序非常有用。


5
我最常用的要求是监控线程计数和内存。我最近的工作涉及到大量线程的服务器分发到网格,因此监视线程使用情况非常重要(这是衡量服务器承担多少分发工作的一种指标)。内存与线程使用密切相关(部分原因在于每个线程关联的对象,部分原因在于每个线程的隐式堆栈分配)。
我们还将工作负载队列数据启用了JMX。上述监视了排队工作项的症状或影响,但最终我们想要监视实际的工作队列。通过JMX公开关键组件是值得的,可以更清晰地了解正在发生的事情。

1
在之前的一个项目中,我们监控了线程数和内存、HTTP会话数量以及查询缓存的大小。JMX与缓存的另一个有趣之处在于可以强制刷新。

1

有点离题,但您可以使用JMX来实现更多功能。目前我正在使用JMX进行热部署/热修复组件。动态地向现有组件添加功能(过滤器等)。JMX非常适合在同一JVM上的组件之间进行通信。我创建的每个组件都被仪表化以使用JMX。


2
请问您能否提供一个演示如何使用JMX的链接?我需要使用动态添加功能到现有组件的特性。 - techzen

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