2.3. 自定义触发器的一般语法规则
请考虑以下定义自定义触发器的语法准则:
- 自定义触发器定义必须包含用于定义总体触发器条件和用于 JFR 记录的事件模板名称的表达式。
-
整个触发器表达式必须放在方括号中(例如
[ProcessCpuLoad > 0.2 ; TargetDuration < duration ("30s")]
)。 - 为了便于阅读,您可以使用触发表达式中的空格,如上例中所示,但这并不是一个要求。
-
事件模板的名称必须在触发器表达式后定义,并在前面加上波形符(
~
)字符(如~profile
)。 -
触发器表达式可由一个或多个限制和目标持续时间组成。约束和目标持续时间的集合必须以分号(
;
)字符分开。 -
每个约束都必须包括:MBean 计数器的名称; 一个关系运算符,如 > (比)、
=
(等于)、< (等于)、< (无)等,以及指定的值。可以指定的关联 Operator 和值类型取决于关联的 MBean 计数器类型(例如,
ProcessCpuLoad > 0.2
)。 可以使用逻辑卷运算符(AND)、
||
(OR)或!
将约束分组在一起。(注意)逻辑。为了提高操作和运算符优先级顺序的可读性和清晰性,分组的限制可能会用括号括起来,但这不是强制要求。例如:
[(MetricA > value1 && MetricB < value2) || MetricC == 'stringvalue' ; TargetDuration > duration("30s")]
- 作为自定义触发器的一部分指定的每个 MBean 计数器的名称必须遵循拼写和大写的精确语法规则。有关您可以指定的 MBean 指标的完整列表,请参阅 MBean 计数器类型。
- 只能为自定义触发器定义一个目标持续时间。目标持续时间应用到整个触发器表达式,该表达式包含在方括号中。
-
目标持续时间可以用秒、分钟或小时表示。例如,
30s
表示 30 秒,5m
表示五分钟,2h
表示两小时,以此类推。 - 目标持续时间是可选的。如果没有指定目标持续时间,则触发会在满足触发器条件后立即发生。
多个自定义触发器定义可以一起指定,每个定义都与一个单独的 JFR 记录相关。不同的自定义触发器定义必须以逗号(
、
)字符分开。例如:[ProcessCpuLoad>0.2]~profile,[ThreadCount>30]~Continuous