- 所有父级接口:
PlatformManagedObject
用于在平台 MBean 服务中标识 MXBean 的对象名称是:
jdk.management.jfr:type=FlightRecorder
Flight Recorder 可以通过以下方式配置:
- 录音选项
指定记录应持续多长时间,以及应在何处和何时转储数据。 - 设置
指定应启用哪些事件以及每个事件应捕获哪种信息。 - 配置
预定义的设置集,通常来自设置文件,同时指定多个事件的配置。
有关设置语法的说明,请参阅包 jdk.jfr 文档;有关配置信息,请参阅 ConfigurationInfo 类文档。
录音选项
下表显示了用于 setRecordingOptions(long, Map) 和 getRecordingOptions(long) 的选项名称。
| Name | 说明 | 默认值 | Format | 示例值 |
|---|---|---|---|---|
name |
设置人类可读的录音名称 | 录音 ID 的字符串表示 | String |
"My Recording" , "profiling" |
maxAge |
指定数据在磁盘存储库中保留的时间长度,直到最旧的数据可能被删除。仅在 disk=true 时有效,否则忽略此参数。 |
"0"(无限制) |
"0" 如果没有施加限制,否则为正 Long 值的字符串表示形式,后跟一个空格和以下单位之一,"ns"(纳秒)"us"(微秒)"ms"(毫秒)"s"(秒)"m"(分钟)"h"(小时)"d"(天) |
"2 h" ,"24 h" ,"2 d" ,"0" |
maxSize |
指定数据在磁盘存储库中保存的大小(以字节为单位)。仅在 disk=true 时有效,否则忽略此参数。 |
"0"(无限制) |
Long 值的字符串表示形式,必须为正数 |
"0" , "1000000000" |
dumpOnExit |
在 Java 虚拟机 (JVM) 退出时将记录数据转储到磁盘 | "false" |
Boolean 值、"true" 或 "false" 的字符串表示 |
"true" ,"false" |
destination |
指定录音停止时写入录音数据的路径。 | "false" |
有关格式,请参阅 Paths#getPath。如果从另一个进程调用此方法,则数据将写入运行目标 JVM 的机器上。如果 destination 是相对路径,则它是相对于目标 JVM 启动的工作目录的。} |
"c:\recording\recotding.jfr" ,"/recordings/recording.jfr" , "recording.jfr" |
disk |
按原样存储记录的数据 | "false" |
Boolean 值、"true" 或 "false" 的字符串表示 |
"true" ,"false" |
duration |
设置录音应该运行多长时间 | "0"(无限制,连续) |
"0" 如果不应施加限制,否则为正 Long 后跟空格和以下单位之一的字符串表示形式:"ns"(纳秒)"us"(微秒)"ms"(毫秒)"s"(秒)"m"(分钟)"h"(小时)"d"(天) |
"60 s" ,"10 m" ,"4 h" ,"0" |
- 自从:
- 9
-
字段摘要
字段 -
方法总结
修饰符和类型方法描述longcloneRecording(long recordingId, boolean stop) 创建现有录音的副本,对于提取部分录音很有用。voidcloseRecording(long recordingId) 关闭具有指定 ID 的记录并释放与该记录关联的所有系统资源。voidcloseStream(long streamId) 关闭具有指定 ID 的录制流并释放与该流关联的所有系统资源。void将录音数据写入指定文件。返回此 Java 虚拟机 (JVM) 的预定义配置列表。返回当前注册的事件类型列表。getRecordingOptions(long recordingId) 返回包含具有指定 ID 的记录选项的映射(例如,目标文件或保留记录数据的时间跨度)。返回可用记录的列表,不一定是正在运行的。getRecordingSettings(long recordingId) 返回一个Map,其中包含具有指定 ID 的记录的设置(例如,事件阈值)long创建录音,但不启动它。longopenStream(long recordingId, Map<String, String> streamOptions) 为具有指定 ID 的记录打开数据流,或0以获取与记录无关的数据。byte[]readStream(long streamId) 从具有指定 ID 的流中读取部分数据,如果没有更多数据可用,则返回null。voidsetConfiguration(long recordingId, String contents) 将配置设置为具有指定 ID 的记录的字符串表示形式。voidsetPredefinedConfiguration(long recordingId, String configurationName) 为具有指定 ID 的录制设置预定义配置。voidsetRecordingOptions(long recordingId, Map<String, String> options) 配置记录选项(例如,目标文件和保留数据的时间跨度)。voidsetRecordingSettings(long recordingId, Map<String, String> settings) 设置并替换指定记录的所有先前设置。voidstartRecording(long recordingId) 使用指定的 ID 开始录制。booleanstopRecording(long recordingId) 停止具有指定 ID 的正在运行的记录。long创建所有可用记录数据的快照记录。在接口 java.lang.management.PlatformManagedObject 中声明的方法
getObjectName
-
字段详细信息
-
MXBEAN_NAME
FlightRecorderMXBean的ObjectName的字符串表示。- 参见:
-
-
方法详情
-
newRecording
创建录音,但不启动它。- 返回:
- 可用于启动、停止、关闭和配置录制的唯一 ID
- 抛出:
IllegalStateException- 如果无法创建飞行记录器(例如,如果 Java 虚拟机 (JVM) 缺少飞行记录器支持,或者无法创建或访问文件存储库)SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
takeSnapshot
long takeSnapshot()创建所有可用记录数据的快照记录。快照是停止状态下的合成记录。如果没有数据可用,则返回大小为
0的记录。快照为以后的操作(例如,更改时间间隔或减小数据大小的操作)提供对数据的稳定访问。
当不再需要访问数据时,调用者必须关闭录音。
- 返回:
- 可用于读取记录数据的唯一 ID
- 抛出:
SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
cloneRecording
long cloneRecording(long recordingId, boolean stop) throws IllegalArgumentException , SecurityException 创建现有录音的副本,对于提取部分录音很有用。克隆的录音包含与原始录音相同的录音数据,但它有一个新的 ID 和一个以
"Clone of recording"为前缀的名称。如果原始记录正在运行,则克隆也正在运行。- 参数:
recordingId- 从中创建克隆的录音的录音 IDstop- 如果新创建的克隆在返回之前停止。- 返回:
- 可用于启动、停止、关闭和配置录制的唯一 ID
- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
startRecording
使用指定的 ID 开始录制。停止的录制无法重新开始。
- 参数:
recordingId- 要开始的记录的 ID- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")IllegalStateException- 参见:
-
stopRecording
boolean stopRecording(long recordingId) throws IllegalArgumentException , IllegalStateException , SecurityException 停止具有指定 ID 的正在运行的记录。- 参数:
recordingId- 停止录制的 ID- 返回:
true如果录制停止,false否则- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录IllegalStateException- 如果记录没有运行SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
closeRecording
关闭具有指定 ID 的记录并释放与该记录关联的所有系统资源。如果录制已经关闭,则调用此方法无效。
- 参数:
recordingId- 要关闭的录音的 ID- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录IOException- 如果发生 I/O 错误SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
openStream
为具有指定 ID 的记录打开数据流,或0以获取与记录无关的数据。
如果map中省略了一个选项,则使用默认值。录制流选项 Name 说明 默认值 Format 示例值 startTime指定开始录制流的时间点。由于数据的存储方式,可能会包含一些在开始时间之前开始或结束的事件。 Instant.MIN_VALUE.toString()ISO-8601。见 Instant.toString()
或自纪元以来的毫秒数"2015-11-03T00:00","1446508800000"endTime指定结束录制流的时间点。由于数据的存储方式,可能会包含一些在结束时间之后开始或结束的事件。 Instant.MAX_VALUE.toString()ISO-8601。见 Instant.toString()
或自纪元以来的毫秒数"2015-11-03T01:00","1446512400000"blockSize指定通过调用 readStream读取的最大字节数"50000"一个正的 long值。
如果 Java 虚拟机 (JVM) 认为该值太大而无法处理,则将blockSize设置为非常高的值可能会导致OutOfMemoryError或IllegalArgumentException。"50000","1000000",streamVersion指定从正在运行的记录中读取数据时要使用的格式 "1.0"带有主要版本和次要版本的版本号。
为了能够从正在运行的记录中读取,必须设置该值"1.0"在打开流之前必须停止具有指定 ID 的记录,除非指定了选项
"streamVersion"。- 参数:
recordingId- 为其打开流的录制 IDstreamOptions- 包含控制数据量及其读取方式的选项的映射,或null以默认块大小获取记录的所有数据- 返回:
- 流的唯一 ID。
- 抛出:
IllegalArgumentException- 如果带有 iD 的记录不存在,或者如果options包含无效值IOException- 如果记录关闭,发生 I/O 错误,或者没有数据可用于指定的记录或间隔SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")
-
closeStream
关闭具有指定 ID 的录制流并释放与该流关联的所有系统资源。如果流已经关闭,则调用此方法无效。
- 参数:
streamId- 流的 ID- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的流IOException- 如果在尝试关闭流时发生 I/O 错误SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
readStream
从具有指定 ID 的流中读取部分数据,如果没有更多数据可用,则返回null。要读取记录的所有数据,请重复调用此方法,直到返回
null。- 参数:
streamId- 流的 ID- 返回:
-
包含记录数据的字节数组,或
null当没有更多数据可用时 - 抛出:
IOException- 如果流已关闭,或者在尝试读取流时发生 I/O 错误IllegalArgumentException- 如果不存在具有流 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")
-
getRecordingOptions
返回包含具有指定 ID 的记录选项的映射(例如,目标文件或保留记录数据的时间跨度)。有关可用的选项名称,请参阅
FlightRecorderMXBean。- 参数:
recordingId- 获取选项的录音 ID- 返回:
-
描述记录选项的map,而不是
null - 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")
-
getRecordingSettings
返回一个Map,其中包含具有指定 ID 的记录的设置(例如,事件阈值)如果同时运行多个记录,则记录的数据可能多于
Map对象中指定的数据。Map中的名称是由"#"分隔的事件名称和设置名称(例如,"jdk.VMInfo#period")。该值是设置值的文本表示(例如,"60 s")。- 参数:
recordingId- 要获取设置的录音 ID- 返回:
-
一张描述录音设置的map,而不是
null - 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")
-
setConfiguration
将配置设置为具有指定 ID 的记录的字符串表示形式。- 参数:
recordingId- 录音的 IDcontents- 要使用的配置文件的字符串表示,而不是null- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录或无法解析配置。SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
setPredefinedConfiguration
void setPredefinedConfiguration(long recordingId, String configurationName) throws IllegalArgumentException 为具有指定 ID 的录制设置预定义配置。- 参数:
recordingId- 要为其设置配置的记录 IDconfigurationName- 配置的名称(例如"profile"或"default"),而不是null- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
setRecordingSettings
void setRecordingSettings(long recordingId, Map <String , String > settings) throws IllegalArgumentException设置并替换指定记录的所有先前设置。设置由名称/值对组成,其中 name 指定要配置的事件和设置,value 指定将其设置为什么。
名称可以通过以下方式形成:
<event-name> + "#" + <setting-name>or
<event-id> + "#" + <setting-name>例如,要将 CPU Load 事件的采样间隔设置为每秒一次,请使用名称
"jdk.CPULoad#period"和值"1 s"。如果多个事件使用相同的名称,例如如果一个事件类在多个类加载器中加载,并且需要区分它们,则名称为"56#period"。事件的 ID 是通过调用EventType.getId()方法获得的,并且对注册该事件的 Java 虚拟机 (JVM) 实例有效。通过调用
FlightRecorder.getEventTypes()和EventType.getName()检索可用事件名称列表。通过调用EventType.getSettingDescriptors()和ValueDescriptor.getName()获取事件类型的可用设置列表。- 参数:
recordingId- 录音的 IDsettings- 要设置的设置的名称值映射,而不是null- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("control")- 参见:
-
setRecordingOptions
void setRecordingOptions(long recordingId, Map <String , String > options) throws IllegalArgumentException配置记录选项(例如,目标文件和保留数据的时间跨度)。有关可以使用的选项和值的说明,请参阅
FlightRecorderMXBean。将值设置为null会将值恢复为默认值。- 参数:
recordingId- 要为其设置选项的录音 IDoptions- 要设置的设置的名称/值映射,而不是null- 抛出:
IllegalArgumentException- 如果不存在具有指定 ID 的记录SecurityException- 如果存在安全管理器,并且调用者没有ManagementPermission("control")或选项包含调用者无权操作的文件。- 参见:
-
getRecordings
List <RecordingInfo > getRecordings()返回可用记录的列表,不一定是正在运行的。MBeanServer 访问:
RecordingInfo的映射类型是CompositeData,具有RecordingInfo.from方法中指定的属性。- 返回:
-
录音列表,不是
null - 抛出:
SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")- 参见:
-
getConfigurations
List <ConfigurationInfo > getConfigurations()返回此 Java 虚拟机 (JVM) 的预定义配置列表。MBeanServer 访问:
ConfigurationInfo的映射类型是CompositeData,具有ConfigurationInfo.from方法中指定的属性。- 返回:
-
预定义配置列表,而不是
null - 抛出:
SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")- 参见:
-
getEventTypes
List <EventTypeInfo > getEventTypes()返回当前注册的事件类型列表。MBeanServer 访问:
EventTypeInfo的映射类型是CompositeData,具有EventTypeInfo.from方法中指定的属性。- 返回:
-
注册事件类型列表,不是
null - 抛出:
SecurityException- 如果存在安全管理器且调用者没有ManagementPermission("monitor")- 参见:
-
copyTo
将录音数据写入指定文件。如果从另一个进程远程调用此方法,则数据将写入运行目标 Java 虚拟机 (JVM) 的计算机上名为
outputFile的文件。如果文件位置是相对路径,则它是相对于启动目标 JVM 的工作目录的。- 参数:
recordingId- 要为其转储数据的记录 IDoutputFile- 写入数据的系统相关文件名,而不是null- 抛出:
IOException- 如果由于 I/O 错误(例如,无效路径)而无法转储记录IllegalArgumentException- 如果不存在具有指定 ID 的记录IllegalStateException- 如果录制尚未开始或已经关闭SecurityException- 如果安全管理器存在且其SecurityManager.checkWrite(java.lang.String)方法拒绝对命名文件的写访问或调用者没有ManagmentPermission("control")- 参见:
-