JMX中的最大MBean数

时间:2013-03-22 08:53:35

标签: java monitoring jmx max mbeans

JMX应用程序可以支持的最大MBean数量是多少?如果有,那是什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

不,您只受限于分配给JVM的堆。

答案 1 :(得分:0)

我处理的是一个多租户的大型应用程序。我们更改了与库的交互,最终每个租户得到几个MBean。这导致大量的MBean注册(数万个)。我们观察到,在开始注册一个bean的时间方面,曲棍球棒的启动速度非常快(2,000个曲棍球需要几秒钟)。我们在mbean注册中观察到很多线程阻塞,具体是:

  • com.sun.jmx.mbeanserver.Repository.contains(ObjectName):461
  • com.sun.jmx.mbeanserver.Repository.addAllMatching(Map,Set,ObjectNamePattern):229
  • com.sun.jmx.mbeanserver.Repository.addMBean(DynamicMBean,ObjectName, RegistrationContext):415
  • com.sun.jmx.mbeanserver.Repository.ObjectNamePattern.matchKeys(ObjectName):190

addAllMatchingmatchKeys似乎遍历所有条目,而不是使用Map.get。另外两个是锁获取或同步。

我们有大量的可用堆,并且CPU使用率是名义上的(3-5%)。我们应用程序的其他部分运行正常。简而言之,随着MBean的数量呈指数增长,创建MBean一直存在争议。所有这些都在JDK 11上。

更糟糕的是,我们禁用了JMX,问题仍然存在。解决方案包括确保库不尝试通过配置注册mbean。

简而言之:是的,在2000年之后添加MBean变得不切实际。我尚未在多种环境下进行测试,因此个人体验可能会有所不同。