Java 使用maxsize=1g的飞行记录器仍会返回缺少时间窗口的轨迹

Java 使用maxsize=1g的飞行记录器仍会返回缺少时间窗口的轨迹,java,jvm,profiling,jfr,Java,Jvm,Profiling,Jfr,我有一个非常资源密集、基于java-8的命令行应用程序,我经常使用flight recorder对其进行评测。我经常注意到的是,当我在任务控制中打开飞行记录器文件(jfr)时,我看到了该过程运行的完整时间跨度,但我错过了该时间窗口前60-70%的事件 我尝试过使用飞行记录器选项,以下是我目前使用的: -Djava.library.path=/some/path/lib-Xmx50G-XX:+UnlockCommercialFeatures-XX:+UseG1GC-XX:+FlightRecord

我有一个非常资源密集、基于java-8的命令行应用程序,我经常使用flight recorder对其进行评测。我经常注意到的是,当我在任务控制中打开飞行记录器文件(jfr)时,我看到了该过程运行的完整时间跨度,但我错过了该时间窗口前60-70%的事件

我尝试过使用飞行记录器选项,以下是我目前使用的:

-Djava.library.path=/some/path/lib-Xmx50G-XX:+UnlockCommercialFeatures-XX:+UseG1GC-XX:+FlightRecorder-XX:StartFlightRecording=name=MyRecording,settings=profile-XX:FlightRecorderOptions=defaultrecording=true,maxsize=1h,dumponexit=true,dumponexitpath=/some/path”


我的希望是,这将自动捕获一条录音,录音将在进程完成时保存到/some/path,并且它保存的文件将高达1 GB。有人知道正确的选项是什么吗?

我将回答我自己的问题。经过一些实验和反复尝试,似乎您需要添加“disk=true”

因此,最终的java参数变成:

-Djava.library.path=/some/path/lib-Xmx50G-XX:+UnlockCommercialFeatures-XX:+UseG1GC-XX:+FlightRecorder-XX:startLightRecording=name=MyRecording,settings=profile-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxsize=1g,maxage=1h,dumponexit=true,dumponexitpath=/some/path”


如果运行JDK8u40或更高版本,则可以简化命令行+UnlockCommercialFeatures-XX:startLightRecording=name=MyRecording,settings=profile,filename=/some/path/MyRecording.jfr,maxsize=1g,maxage=1h,dumponext=true