1

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

提前致谢。

4

2 回答 2

1

我使用一个相当大的多租户应用程序。我们更改了与库的交互,最终每个租户都有多个 MBean。这会导致大量 MBean 注册(数万)。我们观察到,就注册 bean 的时间而言,这开始曲棍球棒的速度非常快(在 2,000 时需要几秒钟)。我们在 mbean 注册中观察到很多线程阻塞,具体来说:

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

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

我们有大量的空闲堆,CPU 使用率是正常的(3-5%)。我们应用程序的其他部分表现正常。简而言之,随着 MBean 的数量以指数方式增长,围绕创建 MBean 存在争议。所有这些都在 JDK 11 上。

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

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

于 2019-02-10T21:21:51.253 回答
0

不,您仅受分配给 JVM 的堆的限制。

于 2013-03-25T09:22:50.463 回答