加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java监控:JMX与Servlets

发布时间:2020-12-15 04:57:41 所属栏目:Java 来源:网络整理
导读:在过去的几年里,我学到了很多关于JMX的知识,并为我的Web应用程序构建了一些非常漂亮的MBean.但是,我不确定我对一个非常基本的问题有一个很好的答案: 为什么在简单的HTTP servlet上使用JMX? 我当前的Web应用程序提供了冗余监视选项:我可以通过JMX等客户端
在过去的几年里,我学到了很多关于JMX的知识,并为我的Web应用程序构建了一些非常漂亮的MBean.但是,我不确定我对一个非常基本的问题有一个很好的答案:

为什么在简单的HTTP servlet上使用JMX?

我当前的Web应用程序提供了冗余监视选项:我可以通过JMX等客户端访问需要通过JMX监视的数据,或者我可以通过servlet访问XML格式的相同数据.我没有看到使用一种方法而不是另一种方法的强烈理由,但servlet方法确实具有可通过简单的http客户端/ Web浏览器读取的主要优点.

我可以看到JMX如何对非Web应用程序的Java应用程序非常有用,但我认为将JMX用于Web应用程序没有任何优势.

解决方法

Why use JMX over simple HTTP servlets?

从我的角度来看,JMX更好有三个原因:

>它需要更少的代码来启用监控点.
>它处理端到端的Java序列化对象,因此有更好的数据一致性.
>它适用于非基于servlet的程序(如您所述).

JMX为特定数据项提供了更简单的界面.您当然可以在许多servlet中编写相同的功能,但我更容易使用JMX公开它们.

例如,如果您使用的是Spring,则可以使用org.springframework.jmx.export注释(@ManagedResource,@ ManagedAttribute等)来标记您的类.我还发布了我的SimpleJmx framework,因此您可以通过几个独立于Spring的注释轻松地公开属性和操作.例如:

@JmxResource(domainName = "j256",objectName = "lookupCache")
public class LookupCache {

    // this can also be done as @JmxAttributeMethod on the getter/setters
    @JmxAttributeField(description = "Number of hits in the cache")
    private int hitCount;
    ...

    @JmxOperation(description = "Flush the cache")
    public void flushCache() {
       ...
    }
}

我有一个fully working example program,看看它是如何工作的.因此,展示值或操作所需要做的就是为类和每个属性和/或方法添加注释.使用SimpleJmx发布它的代码如下所示. Spring虽然与bean相似但是类似:

// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
jmxServer.start();
// register our lookupCache object defined above
jmxServer.register(lookupCache);

要在servlet中获得类似的功能,需要的代码不仅仅是注释.也就是说,可能存在一些框架,它们在servlet中提供了类似的功能,我不知道.

还有一些说明:

>可能有更好的监控工具可以使用HTTP / HTML,但也有大量的分布式JMX监控应用程序.可能是一个折腾.
>能够以编程方式从JMX服务器获取对象是一个优势,而不仅仅是来自servlet页面的字符串. SimpleJmx还支持简单的JMX客户端,尽管存在更好的JMX客户端.>显然,JVM默认发布了许多其他有价值的数据:VM设置,线程详细信息,内存信息等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读