PMI、J2EE性能数据框架和 JMX MBeans
在 WebSphere Application Server V5 中,PMI 不仅为应用服务器中的各种组件提供性能数据,同时也实现了由 J2EE管理规范中的性能数据框架定义的统计接口。这些统计接口包括以下的数据类型:
CountStatistic
TimeStatistic
RangeStatistic
BoundedRangeStatistic.
系统还定义了 Stats 接口来包含统计数据列表。
PMI 实现了这些统计接口,更新各种统计数据并通过不同的接口公开这些数据。在 WebSphereApplication Server V4 中,PMI 提供了定义 CpdLong、CpdStat 和 CpdLoad 数据类型的 PMI客户机接口。(这些接口仍然支持向后兼容。)表 1 逐条描述了用于版本 5 中的数据类型的 API。请注意,PMI 数据中的 API 扩展了 J2EE性能数据框架里的定义,用 * 来标志这些由 PMI 扩展的 API。
表 1. 不同的 PMI 数据类型和 API
5.0 类型 | 对应 4.0 的类型 | 描述 | API |
CountStatistic | CpdLong | 保持单一的当前值 | getCount() |
TimeStatistic | CpdStat | 保持总数、个数、最小值和最大值。均值可由总数与个数相除得到。 | getTotalTime() getCount() getMean() getMinTime() getMaxTime() getTimeOfSquares()* |
RangeStatistic | CpdLoad | 保持当前值、最小值、最大值和以时间衡量的总数,由它可以得到平均值。 | getCurrent() getLowWaterMark() getHighWaterMark() getIntegral()* getMean()* |
BoundedRangeStatistic | CpdLoad | 保持当前值、最小值、最大值、下限、上限和以时间衡量的总数,由它可以得到平均值。 | getCurrent() getLowWaterMark() getHighWaterMark() getIntegral()* getMean()* getLowerBound() getUpperBound() |
Stats | CpdCollection | 保持统计数据列表,也可选择性保持来自其子模块的 Stats 对象列表。 | getStatistic(int dataId)* getStatistic(String name) getStatistics() getStatisticNames() getSubStats()* |
getName: 返回数据名称
getUnit:返回数据单元
getDescription:返回数据描述
PMI 数据可以通过不同的接口进行访问,包括 JMX 接口。JMX 体系结构是一个标准的管理模块,受管 Bean(Managed Bean,MBean)就是在该模块中管理业务应用程序和资源的。MBean可以是一个统计提供者,它为受管理的应用程序和资源提供各种统计数据。PMI 为作为统计提供者的 MBean 实现和刷新统计数据(也就是 PMI数据)。这些 PMI 数据可以在客户端通过 JMX 接口进行检索。
如果某一 MBean 是一个统计提供者,那么它的 PMI统计数据可以使用 Stats 属性从 MBean 进行检索。在 WebSphere Application Server V5 中有几个 MBean提供了 Stats 属性。请查看 WebSphere Application Server Information Center(在Performance => Monitoring Performance => Performance data organization中),其中有这种 MBean 类型的列表。
PMI 服务和 PerfMBean体系结构
在 WebSphere Application Server V5 中,PMI服务在每个应用服务器和节点代理进程中都可用。在获取 PMI 数据之前首先应该启用 PMI 服务,您可以通过管理控制台或用管理脚本来启用 PMI服务。在这两种情况下,应用服务器都必须重启。在 Network Deployment 环境中,PMI 服务可以在应用服务器或 NodeAgent 中启用。
系统实现了一个名为“PerfMBean”的 MBean 来配置 PMI 服务(也就是设置装备级别),并且提供 API 来通过一次 JMX 调用从多个MBean收集 PMI 数据,而不是使用各种 MBean 的。图 2 是 PMI 体系结构的一个简化的视图。PerfMBean API 或各种 MBeanAPI 都提供 PMI 统计数据,但只有 PerfMBean 这个 MBean 能够设置装备级别。PerfMBean 还可以通过一次 JMX调用处理多个 MBean 来减少远程 JMX 调用的次数。
图 2. PMI数据访问的高级视图
表 2 归纳了如何使用 PerfMBean 和各种 MBean 来配置和访问 PMI 数据。由于 PerfMBean 提供了比 MBean更广泛和更有效的功能,所以通常用它来开发监控工具。
表 2. 不同的 PMI 数据类型和 API
MBean | 设置 装备级别 | 从单个 MBean 中获取 PMI 数据 | 从多个 MBean 中获取 PMI 数据 | 从没有 MBean 的 PMI 模块和子模块获取 PMI 数据 | 获取静态配置信息 |
PerfMBean | Yes | Yes | Yes | Yes | Yes |
IndividualMBeans | No | Yes | No | No |
既然我们已经讨论了 PMI 数据、JMX、PerfMBean 和各种 MBean 之间的关系,现在我们就来看看如何使用 JMX 接口来获取 PMI数据。