[英]Java Flight Recorder - Continuous rolling recording
如何以最大年龄将滚动记录放入磁盘?
当我的服务器出现问题时,我希望能够转储前几个小时的分析信息并对其进行分析,以了解哪里出了问题。
因此,换句话说,我希望 JDK 将记录连续保存到磁盘,但删除较旧的文件/记录,以使总量保持在某个阈值(年龄或大小)以下。
为此,这些是我为Oracle JDK 1.8.0_144
版本提供的选项:
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:StartFlightRecording
name=<foo-bar>
-XX:FlightRecorderOptions
defaultrecording=true // what does this do even?
disk=true
maxage=1h // this is what I thought would solve my problem!
repository=<path-to-where-I-want-the-recording>
maxchunksize=5M
我原以为设置maxage=1h
只会将最后 1 小时的记录保留在磁盘上。 但不,它已经过去 1 天。 并且文件没有被封顶。
同时maxchunksize
似乎工作。 各种.jfr
文件大约有 5M。 其中有很多这样的文件,因为没有强制执行年龄上限。
我究竟做错了什么?
我认为,问题在于您正在开始两个录制,一个使用-XX:StartFlightRecording
,另一个使用-XX:FlightRecorderOptions=defaultrecording=true
。
带有-XX:StartFlightRecording
的那个是无界的。 我认为以下是 Oracle JDK 1.8.0_144 和您的用例的合适选项:
-XX:+UnlockCommercialFeatures
-XX:FlightRecorderOptions=repository=<path>
-XX:StartFlightRecording=maxage=1h,name=<name>
-XX:+UnlockCommercialFeatures
是必需的,因为 JFR 是 Oracle JDK 8 中的商业功能。从 JDK 11 开始,不再需要它。
JDK 8u40 或更高版本的-XX:StartFlightRecoding
不需要-XX:+FlightRecorder
。 JFR 缓冲区现在在第一次录制开始时设置,而不是在 JVM 开始时设置。 如果使用defaultrecording=true
开始录制,则仍然需要-XX:+FlightRecorder
。
-XX:FlightRecorderOptions=defaultrecording=true
做了很多事情,主要是出于历史原因,但仅在进行内存记录时才需要。 从 JDK 9 开始,该选项不再需要并且已被删除。
-XX:FlightRecorderOptions=disk=true,maxage=1h
如果使用-XX:StartFlightRecording
则不需要,这是启动 JFR 的推荐方式。
除非您有问题,否则我会将maxchunksize
保留为默认值 (12 MB)。 这是 JFR 已针对它进行优化和测试的块文件大小。
我正在接受Kire Haglin
的回答。
为在这个 JDK 上对我有用的东西增加一点价值:
-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording
name=<foo-bar>
maxage=12h
dumponexit=true
-XX:FlightRecorderOptions
dumponexitpath=<path-to-file>.jfr
disk=true
repository=<some-folder-path>
请注意额外的参数dumponexit
和dumponexitpath
,我原来的问题中没有。 我最终也需要那些。
经过反复试验,看来dumponexit
必须存在于XX:StartFlightRecording
参数中,而dumponexitpath
必须存在于FlightRecorderOptions
参数中。 似乎没有其他安排有效。
另请注意,删除-XX:+FlightRecorder
和defaultrecording=true
(正如 Kire 建议的那样)仍然有效。 话虽如此,我认为defaultrecording=true
的存在不会触发双重录制。
我这样说是因为发出命令jcmd <PID> JFR.check <name>
我只有一个条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.