JProfiler帮助文档

MBean 浏览器

许多应用服务器和框架(如 Apache Camel)使用 JMX 来暴露 多个 MBean 以进行配置和 MONITOR(监控)。JVM 本身也会发布一些 平台 MXBean(platform MXBeans), 用于展示 JVM 底层操作相关的重要信息。

JProfiler 内置了一个 MBean 浏览器,可以显示被分析(profiled)VM 中所有已注册的 MBean。访问 MBean 服务器时, 不需要 JMX 的远程管理级别,因为 JProfiler agent 已经在进程内运行,并且可以访问所有已注册的 MBean 服务器。

JProfiler 支持 Open MBean 的类型系统。除了定义一些简单类型外, Open MBean 还可以定义不涉及自定义类的复杂数据类型。同时,数组和表格也可作为数据结构使用。通过 MXBean, JMX 提供了一种简单方式,可以自动从 Java 类创建 Open MBean。例如,JVM 提供的 MBean 就是 MXBean。

虽然 MBean 没有层级结构,JProfiler 会将它们组织成树状结构:以对象域名到第一个冒号为第一层级, 并将所有属性作为递归嵌套的层级。属性值优先显示,属性键以括号形式显示在末尾。 type 属性会被优先放在顶层节点下方。

属性

在显示 MBean 内容的树形表格顶层,你可以看到 MBean 的属性。

以下数据结构会以嵌套行的形式展示:

  • 数组
    基本类型数组和对象数组的元素会以嵌套行显示,索引作为键名。
  • 复合数据
    复合数据类型中的所有项都会以嵌套行显示。每个项可以是任意类型,因此嵌套可以达到任意深度。
  • 表格数据
    在 MXBean 中,你最常遇到的是表格数据,其中 java.util.Map 的实例 会映射为具有一个键列和一个值列的表格数据类型。如果键的类型是简单类型, 则 map 会“内联”显示,每个键值对作为嵌套行展示。如果键是复杂类型, 则会插入一层“map entry”元素,包含嵌套的键和值条目。对于具有复合键和多值的一般表格类型也是如此。

可选地,MBean 属性可以支持编辑,此时其值旁会显示  编辑图标, 并且 编辑值 操作会变为可用。复合类型和表格类型无法在 MBean 浏览器中编辑, 但数组或简单类型是可编辑的。

如果某个值可为 null(如数组),编辑器会有一个复选框用于选择 null 状态。

数组元素用分号分隔。末尾的一个分号可以忽略,因此 11; 是等价的。分号前缺失的值会被视为对象数组的 null 值。 对于字符串数组,你可以用双引号("")创建空元素, 并通过对整个元素加引号来包含分号。字符串元素中的双引号需要成对出现。 例如,输入如下字符串数组值:

"Test";"";;"embedded "" quote";"A;B";; 

会创建如下字符串数组:

new String[] {"Test", "", null, "embedded \" quote", "A;B", null} 

JProfiler 可以基于数值型 MBean 属性值创建自定义遥测(telemetry)。 当你 为自定义遥测定义 MBean 遥测线时, 会弹出 MBean 属性浏览器,允许你选择提供遥测数据的属性。 如果你已经在 MBean 浏览器中,右键菜单中的 为该值添加遥测 操作 可以方便地创建新的自定义遥测。

遥测也可以跟踪复合数据或表格数据中带有简单键和单一值的嵌套值。 选择嵌套行时,会构建一个值路径,路径组件用斜杠分隔。

操作

除了查看和修改 MBean 属性外,你还可以调用 MBean 操作并检查其返回值。 MBean 操作是 MBean 接口上不是 setter 或 getter 的方法。

操作的返回值可能是复合、表格或数组类型,因此会弹出一个新窗口,内容类似于 MBean 属性树表。 对于简单返回类型,只有一行名为“返回值”。对于其他类型,“返回值”是结果添加到的根元素。

MBean 操作可以有一个或多个参数。输入参数时,适用与编辑 MBean 属性相同的规则和限制。

MBean 快照

除了查看 MBean 的实时值外,你还可以对其当前状态进行快照。每个新快照 都会作为 MBean 视图部分的独立视图添加,并可分配自定义标签。快照时, 只包含根据当前过滤器显示的 MBean。这样你可以聚焦于特定 MBean,减少查询无关 MBean 的开销。

在 JProfiler UI 中保存快照时,所有 MBean 快照也会被保存,而实时 MBean 视图不会被保存。 对于离线分析,你可以使用 Controller API 或“保存 MBean 快照”触发器操作以编程方式获取 MBean 快照。

Controller API 和触发器操作都支持可选标签,该标签会显示在视图选择器中, 也支持可选正则表达式用于过滤包含的 MBean。