转储Java飞行记录的一部分

转储Java飞行记录的一部分,java,jfr,java-mission-control,Java,Jfr,Java Mission Control,假设我使用以下标志为JVM配置了一个连续飞行记录 java -XX:StartFlightRecording=disk=false,dumponexit=true -XX:FlightRecorderOptions=memorysize=200m -jar .... 据我所知,此配置在热点事件的内存中存储了高达200mb的数据,当达到限制时,将丢弃最旧的数据 要转储记录,我正在通过jcmd使用JFR.dump命令。还有一种通过任务控制提取记录的替代方法,但是由于其中的一个bug,我没有成功提取

假设我使用以下标志为JVM配置了一个连续飞行记录

java
-XX:StartFlightRecording=disk=false,dumponexit=true
-XX:FlightRecorderOptions=memorysize=200m
-jar
....
据我所知,此配置在热点事件的内存中存储了高达200mb的数据,当达到限制时,将丢弃最旧的数据

要转储记录,我正在通过
jcmd
使用
JFR.dump
命令。还有一种通过任务控制提取记录的替代方法,但是由于其中的一个bug,我没有成功提取出在任务控制的JVM之外运行的记录。令人惊讶的是,MBean服务器管理工作正常

无论如何,我发现可以通过任务控制的“转储”功能指定从连续记录转储的间隔范围,例如从2021-01-01 13:00:00到2021-01-01 14:00:00。假设当前时间为2021-01-02 17:00:00。如何通过
JFR.dump
指定相同的间隔?查看引用,没有任何标志可以这样做。那么任务控制中心是如何做到的呢


注意:我使用的是JMC 8和Oracle JDK 11 0 10u8。

不幸的是,您的链接在搜索引擎中排名很高,但它已经有六年历史了。您可以找到最新的文档(JDK16),它与JDK11非常相似

无法转储部分基于内存的录制。在您的示例中,您必须删除'disk=false'和-XX:flightrecorder选项,并将'maxsize=200M'添加到-XX:StartFlightRecording:

$ java -XX:StartFlightRecording:maxsize=200M -jar ...
然后你可以做:

$ jcmd <pid> JFR.dump begin=2021-01-01T13:00:00 end=2021-01-01T14:00:00
$jcmd JFR.dump begin=2021-01-01T13:00:00 end=2021-01-01T14:00:00
日期时间格式为,这是LocalDataTime.toString()和Instant.toString()生成的

如果省略结束时间,JFR.dump将假定在执行转储时结束,如果指定相对时间,则它将与转储时间相对

例如,要转储最后一个小时,请执行以下操作:

$ jcmd <pid> JFR.dump begin=-1h
$jcmd JFR.dump begin=-1h
您还可以使用maxage参数来限制数据,例如:

$ jcmd <pid> JFR.dump maxage=1h
$ jcmd <pid> JFR.dump maxsize=50MB
$jcmd JFR.dump maxage=1h
maxsize参数可用于指定要包含的数据量,例如:

$ jcmd <pid> JFR.dump maxage=1h
$ jcmd <pid> JFR.dump maxsize=50MB
$jcmd JFR.dump maxsize=50MB
另一种方法是创建两个基于磁盘的录制:

$ java -XX:StartFlightRecording:maxsize=200M,name=sized
       -XX:StartFlightRecording:maxage=1h,name=aged 
       -jar ...

$ jcmd <pid> JFR.dump name=aged 
$java-XX:StartFlightRecording:maxsize=200M,name=size
-XX:StartLightRecording:maxage=1h,name=aged
-罐子。。。
$jcmd JFR.dump name=过期
两次录制的开销与一次录制的开销相同


(我不会太担心基于磁盘的记录的开销。JFR中的所有数据都是无锁写入的,并由后台线程刷新。磁盘和内存之间的开销差异通常是无法测量的)

作为旁注,是否有一个邮件列表来报告任务控制的问题?