PlatformManagedObject
public interface FlightRecorderMXBean extends PlatformManagedObject
The object name for identifying the MXBean in the platform MBean server is:
jdk.management.jfr:type=FlightRecorder
Flight Recorder can be configured in the following ways:
See the package jdk.jfr
documentation for descriptions of the settings syntax and the ConfigurationInfo
class documentation for configuration information.
The following table shows the options names to use with setRecordingOptions(long, Map)
and getRecordingOptions(long)
.
Name | Descripion | Default value | Format | Example values |
---|---|---|---|---|
name | Sets a human-readable recording name | String representation of the recording id | String |
"My Recording" , "profiling"
|
maxAge | Specify the length of time that the data is kept in the disk repository until the oldest data may be deleted. Only works if disk=true , otherwise this parameter is ignored. |
"0" (no limit) |
"0" if no limit is imposed, otherwise a string representation of a positive Long value followed by an empty space and one of the following units,"ns" (nanoseconds)"us" (microseconds)"ms" (milliseconds)"s" (seconds)"m" (minutes)"h" (hours)"d" (days) |
"2 h" ,"24 h" ,"2 d" ,"0"
|
maxSize | Specifies the size, measured in bytes, at which data is kept in disk repository. Only works if disk=true , otherwise this parameter is ignored. |
"0" (no limit) | String representation of a Long value, must be positive |
"0" , "1000000000"
|
dumpOnExit | Dumps recording data to disk on Java Virtual Machine (JVM) exit | "false" | String representation of a Boolean value, "true" or "false"
|
"true" ,"false"
|
destination | Specifies the path where recording data is written when the recording stops. | "false" | See Paths#getPath for format. If this method is invoked from another process, the data is written on the machine where the target JVM is running. If destination is a relative path, it is relative to the working directory where the target JVM was started.} |
"c:\recording\recotding.jfr" ,"/recordings/recording.jfr" , "recording.jfr"
|
disk | Stores recorded data as it is recorded | "false" | String representation of a Boolean value, "true" or "false"
|
"true" ,"false"
|
duration | Sets how long the recording should be running |
"0" (no limit, continuous) |
"0" if no limit should be imposed, otherwise a string representation of a positive Long followed by an empty space and one of the following units:"ns" (nanoseconds)"us" (microseconds)"ms" (milliseconds)"s" (seconds)"m" (minutes)"h" (hours)"d" (days) |
"60 s" ,"10 m" ,"4 h" ,"0"
|
Modifier and Type | Field | Description |
---|---|---|
static final String |
MXBEAN_NAME |
String representation of the ObjectName for the FlightRecorderMXBean . |
Modifier and Type | Method | Description |
---|---|---|
long |
cloneRecording |
Creates a copy of an existing recording, useful for extracting parts of a recording. |
void |
closeRecording |
Closes the recording with the specified ID and releases any system resources that are associated with the recording. |
void |
closeStream |
Closes the recording stream with the specified ID and releases any system resources that are associated with the stream. |
void |
copyTo |
Writes recording data to the specified file. |
List |
getConfigurations() |
Returns the list of predefined configurations for this Java Virtual Machine (JVM). |
List |
getEventTypes() |
Returns the list of currently registered event types. |
Map |
getRecordingOptions |
Returns a map that contains the options for the recording with the specified ID (for example, the destination file or time span to keep recorded data). |
List |
getRecordings() |
Returns the list of the available recordings, not necessarily running. |
Map |
getRecordingSettings |
Returns a Map that contains the settings for the recording with the specified ID, (for example, the event thresholds) |
long |
newRecording() |
Creates a recording, but doesn't start it. |
long |
openStream |
Opens a data stream for the recording with the specified ID, or 0 to get data irrespective of recording. |
byte[] |
readStream |
Reads a portion of data from the stream with the specified ID, or returns null if no more data is available. |
void |
setConfiguration |
Sets a configuration as a string representation for the recording with the specified ID. |
void |
setPredefinedConfiguration |
Sets a predefined configuration for the recording with the specified ID. |
void |
setRecordingOptions |
Configures the recording options (for example, destination file and time span to keep data). |
void |
setRecordingSettings |
Sets and replaces all previous settings for the specified recording. |
void |
startRecording |
Starts the recording with the specified ID. |
boolean |
stopRecording |
Stops the running recording with the specified ID. |
long |
takeSnapshot() |
Creates a snapshot recording of all available recorded data. |
getObjectName
static final String MXBEAN_NAME
ObjectName
for the FlightRecorderMXBean
.long newRecording() throws IllegalStateException, SecurityException
IllegalStateException
- if Flight Recorder can't be created (for example, if the Java Virtual Machine (JVM) lacks Flight Recorder support, or if the file repository can't be created or accessed)SecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
long takeSnapshot()
A snapshot is a synthesized recording in a stopped state. If no data is available, a recording with size 0
is returned.
A snapshot provides stable access to data for later operations (for example, operations to change the time interval or to reduce the data size).
The caller must close the recording when access to the data is no longer needed.
SecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
long cloneRecording(long recordingId, boolean stop) throws IllegalArgumentException, SecurityException
The cloned recording contains the same recording data as the original, but it has a new ID and a name prefixed with "Clone of recording"
. If the original recording is running, then the clone is also running.
recordingId
- the recording ID of the recording to create a clone fromstop
- if the newly created clone is stopped before returning.IllegalArgumentException
- if a recording with the specified ID doesn't existSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void startRecording(long recordingId) throws IllegalStateException, SecurityException
A recording that is stopped can't be restarted.
recordingId
- ID of the recording to startIllegalArgumentException
- if a recording with the specified ID doesn't existSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
IllegalStateException
boolean stopRecording(long recordingId) throws IllegalArgumentException, IllegalStateException, SecurityException
recordingId
- the ID of the recording to stoptrue
if the recording is stopped, false
otherwiseIllegalArgumentException
- if a recording with the specified ID doesn't existIllegalStateException
- if the recording is not runningSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void closeRecording(long recordingId) throws IOException
If the recording is already closed, invoking this method has no effect.
recordingId
- the ID of the recording to closeIllegalArgumentException
- if a recording with the specified ID doesn't existIOException
- if an I/O error occursSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
long openStream(long recordingId, Map<String,String> streamOptions) throws IOException
0
to get data irrespective of recording. Name | Descripion | Default value | Format | Example values |
---|---|---|---|---|
startTime | Specifies the point in time to start a recording stream. Due to how data is stored, some events that start or end prior to the start time may be included. | Instant.MIN_VALUE.toString() | ISO-8601. See Instant.toString() or milliseconds since epoch |
"2015-11-03T00:00" ,"1446508800000"
|
endTime | Specifies the point in time to end a recording stream. Due to how data is stored, some events that start or end after the end time may be included. | Instant.MAX_VALUE.toString() | ISO-8601. See Instant.toString() or milliseconds since epoch |
"2015-11-03T01:00" , "1446512400000"
|
blockSize | Specifies the maximum number of bytes to read with a call to readStream | "50000" | A positive long value. Setting blockSize to a very high value may result in OutOfMemoryError or an IllegalArgumentException , if the Java Virtual Machine (JVM) deems the value too large to handle. |
"50000" ,"1000000" , |
streamVersion | Specifies format to use when reading data from a running recording | "1.0" | A version number with a major and minor. To be able to read from a running recording the value must be set |
"1.0" |
The recording with the specified ID must be stopped before a stream can be opened, unless the option "streamVersion"
is specified.
recordingId
- ID of the recording to open the stream forstreamOptions
- a map that contains the options that controls the amount of data and how it is read, or null
to get all data for the recording with the default block sizeIllegalArgumentException
- if a recording with the iD doesn't exist, or if options
contains invalid valuesIOException
- if the recording is closed, an I/O error occurs, or no data is available for the specified recording or intervalSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void closeStream(long streamId) throws IOException
If the stream is already closed, invoking this method has no effect.
streamId
- the ID of the streamIllegalArgumentException
- if a stream with the specified ID doesn't existIOException
- if an I/O error occurs while trying to close the streamSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
byte[] readStream(long streamId) throws IOException
null
if no more data is available. To read all data for a recording, invoke this method repeatedly until null
is returned.
streamId
- the ID of the streamnull
when no more data is availableIOException
- if the stream is closed, or an I/O error occurred while trying to read the streamIllegalArgumentException
- if no recording with the stream ID existsSecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
Map<String,String> getRecordingOptions(long recordingId) throws IllegalArgumentException
See FlightRecorderMXBean
for available option names.
recordingId
- the ID of the recording to get options fornull
IllegalArgumentException
- if no recording with the specified ID existsSecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
Map<String,String> getRecordingSettings(long recordingId) throws IllegalArgumentException
Map
that contains the settings for the recording with the specified ID, (for example, the event thresholds) If multiple recordings are running at the same time, more data could be recorded than what is specified in the Map
object.
The name in the Map
is the event name and the setting name separated by "#"
(for example, "jdk.VMInfo#period"
). The value is a textual representation of the settings value (for example, "60 s"
).
recordingId
- the ID of the recordings to get settings fornull
IllegalArgumentException
- if no recording with the specified ID existsSecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
void setConfiguration(long recordingId, String contents) throws IllegalArgumentException
recordingId
- ID of the recordingcontents
- a string representation of the configuration file to use, not null
IllegalArgumentException
- if no recording with the specified ID exists or if the configuration could not be parsed.SecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void setPredefinedConfiguration(long recordingId, String configurationName) throws IllegalArgumentException
recordingId
- ID of the recording to set the configuration forconfigurationName
- the name of the configuration (for example, "profile"
or "default"
), not null
IllegalArgumentException
- if no recording with the specified ID existsSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void setRecordingSettings(long recordingId, Map<String,String> settings) throws IllegalArgumentException
A setting consists of a name/value pair, where name specifies the event and setting to configure, and the value specifies what to set it to.
The name can be formed in the following ways:
<event-name> + "#" + <setting-name>
or
<event-id> + "#" + <setting-name>
For example, to set the sample interval of the CPU Load event to once every second, use the name "jdk.CPULoad#period"
and the value "1 s"
. If multiple events use the same name, for example if an event class is loaded in multiple class loaders, and differentiation is needed between them, then the name is "56#period"
. The ID for an event is obtained by invoking EventType.getId()
method and is valid for the Java Virtual Machine (JVM) instance that the event is registered in.
A list of available event names is retrieved by invoking FlightRecorder.getEventTypes()
and EventType.getName()
. A list of available settings for an event type is obtained by invoking EventType.getSettingDescriptors()
and ValueDescriptor.getName()
.
recordingId
- ID of the recordingsettings
- name value map of the settings to set, not null
IllegalArgumentException
- if no recording with the specified ID existsSecurityException
- if a security manager exists and the caller does not have ManagementPermission("control")
void setRecordingOptions(long recordingId, Map<String,String> options) throws IllegalArgumentException
See FlightRecorderMXBean
for a description of the options and values that can be used. Setting a value to null
restores the value to the default value.
recordingId
- the ID of the recording to set options foroptions
- name/value map of the settings to set, not null
IllegalArgumentException
- if no recording with the specified ID existsSecurityException
- if a security manager exists, and the caller does not have ManagementPermission("control")
or an option contains a file that the caller does not have permission to operate on.List<RecordingInfo> getRecordings()
MBeanServer access:
The mapped type of RecordingInfo
is CompositeData
with attributes as specified in the RecordingInfo.from
method.
null
SecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
List<ConfigurationInfo> getConfigurations()
MBeanServer access:
The mapped type of ConfigurationInfo
is CompositeData
with attributes as specified in the ConfigurationInfo.from
method.
null
SecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
List<EventTypeInfo> getEventTypes()
MBeanServer access:
The mapped type of EventTypeInfo
is CompositeData
with attributes as specified in the EventTypeInfo.from
method.
null
SecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor")
void copyTo(long recordingId, String outputFile) throws IOException, SecurityException
If this method is invoked remotely from another process, the data is written to a file named outputFile
on the machine where the target Java Virtual Machine (JVM) is running. If the file location is a relative path, it is relative to the working directory where the target JVM was started.
recordingId
- the ID of the recording to dump data foroutputFile
- the system-dependent file name where data is written, not null
IOException
- if the recording can't be dumped due to an I/O error (for example, an invalid path)IllegalArgumentException
- if a recording with the specified ID doesn't existIllegalStateException
- if the recording is not yet started or if it is already closedSecurityException
- if a security manager exists and its SecurityManager.checkWrite(java.lang.String)
method denies write access to the named file or the caller does not have ManagmentPermission("control")
© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/jdk.management.jfr/jdk/management/jfr/FlightRecorderMXBean.html