包 jdk.jfr
定义事件
Flight Recorder 将数据收集为事件。事件具有时间戳、持续时间和通常特定于应用程序的有效负载,可用于诊断正在运行的应用程序直至故障或崩溃。
要定义飞行记录器事件,请扩展 Event 并添加与有效载荷的数据类型相匹配的字段。可以使用 jdk.jfr 包中提供的注释或使用具有 MetadataDefinition 注释的用户定义注释来添加有关字段的元数据,例如标签、描述和单位。
定义事件类后,可以创建实例(事件对象)。通过将数据分配给字段来将数据存储在事件中。可以使用 Event 类中可用的 begin 和 end 方法显式控制事件计时。
收集数据以存储在事件中可能很昂贵。 Event.shouldCommit() 方法可用于验证在调用 Event.commit() 方法时是否实际将事件实例写入系统。如果 Event.shouldCommit() 返回 false ,则可以避免这些操作。
有时事件的字段布局在编译时是未知的。在这种情况下,可以动态定义事件。但是,动态事件的性能水平可能与静态定义的事件不同,并且工具可能无法在不知道布局的情况下识别和可视化数据。
要动态定义事件,请使用 EventFactory 类并使用 ValueDescriptor 类定义字段,并使用 AnnotationElement 类定义注释。使用工厂分配事件并使用 Event.set(int, Object) 方法填充它。
控制飞行记录仪
Flight Recorder 可以通过使用 jcmd 命令行工具在本地控制,也可以通过使用在平台 MBeanServer 中注册的 FlightRecorderMXBean 接口远程控制。当需要直接编程访问时,可以通过调用 FlightRecorder.getFlightRecorder() 和使用 Recording 类创建的记录来获取飞行记录器实例,从中配置要记录的数据量。
设置和配置
设置由名称/值对组成,其中 name 指定要配置的事件和设置,value 指定将其设置为什么。
名称可以通过以下方式形成:
<event-name> + "#" + <setting-name>
或者
<event-id> + "#" + <setting-name>
例如,要将 CPU Load 事件的采样间隔设置为每秒一次,请使用名称 "jdk.CPULoad#period" 和值 "1 s" 。如果多个事件使用相同的名称,例如如果一个事件类在多个类加载器中加载,并且需要区分它们,则名称为 "56#period" 。事件的 ID 是通过调用 EventType.getId() 方法获得的,并且对注册该事件的 Java 虚拟机实例有效。
通过调用 FlightRecorder.getEventTypes() 和 EventType.getName() 检索可用事件名称列表。通过调用 EventType.getSettingDescriptors() 和 ValueDescriptor.getName() 获取事件类型的可用设置列表。
预定义设置
| Name | Description | 默认值 | Format | 示例值 |
|---|---|---|---|---|
enabled |
指定是否记录事件 | "true" |
Boolean("true" 或 "false")的字符串表示 |
"true" "false" |
threshold |
指定不记录事件的持续时间 | "0"(无限制) |
"0" 如果未使用阈值,则为正 Long 后跟空格和以下单位之一的字符串表示形式:
|
"0" "10 ms" “1秒” |
period |
指定事件发出的时间间隔,如果它是周期性的 | "everyChunk" |
"everyChunk" ,如果每次文件旋转都应发出周期性事件,否则为正 Long 值的字符串表示形式,后跟一个空格和以下单位之一:
|
"20 ms" "1 s" "everyChunk" |
stackTrace |
指定是否记录来自 Event.commit() 方法的堆栈跟踪 |
"true" |
Boolean("true" 或 "false")的字符串表示 |
"true" ,"false" |
空值处理
所有方法都在 Javadoc 中定义它们是接受还是返回 null。通常这表示为 "not null" 。如果在不允许的地方使用 null 参数,则会抛出 java.lang.NullPointerException。如果将 null 参数传递给抛出其他异常的方法,例如 java.io.IOException ,则 java.lang.NullPointerException 优先,除非该方法的 Javadoc 明确说明如何处理 null,即抛出 java.lang.IllegalArgumentException。
- 自从:
- 9
-
类描述描述事件元数据,例如标签、描述和单位。事件字段注解,指定该值为布尔标志,
true或false值。事件注解,以人类可读路径的格式将事件类型与类别相关联。描述配置的设置和元数据的集合。元注解,指定一个注解表示一种内容类型,例如时间跨度或频率。事件字段注解,指定一个值表示一个数据量(例如,字节)。使用一两句话描述元素的注解。事件注解,确定是否应默认启用事件。事件的基类,将被子类化以定义事件及其字段。用于在运行时定义事件的类。将事件设置应用于录音的便利类。描述一个事件、它的字段、设置和注解。指定元素是实验性的并且可能会更改,恕不另行通知的注解。用于访问、控制和管理飞行记录器的类。监听Flight Recorder生命周期的回调接口。控制访问飞行记录器的权限。事件字段注解,指定该值为频率,以 Hz 为单位测量。为元素设置人类可读名称的注释(例如,"Maximum Throughput")。事件字段注解,指定值为内存地址。用于定义新型事件元数据的元注解。为元素设置默认名称的注解。用于分数的事件字段注解,通常在0.0和1.0之间,以指定该值为百分比。事件注解,指定周期性事件的默认设置值。提供配置、启动、停止和转储记录数据到磁盘的方法。指示录音生命周期中的状态。事件注解,用于程序化事件注册。关系注释的元注释,用于注解。要扩展以创建设置控件的基类。指定应使用事件类中的方法来过滤事件的注解。描述事件设置。事件注解,确定事件默认情况下是否具有堆栈跟踪。事件注解,指定不记录事件的默认持续时间(例如,"20 ms")。事件字段注解,指定该值为持续时间。事件字段注解,指定值为时间点。事件字段注解,指定事件从线程转换。事件字段注解,指定事件将很快过渡到一个线程。事件字段注解,指定该值是无符号数据类型。描述事件字段和注解元素。