gpt4 book ai didi

Java Flight Recorder 选项不起作用,文件仅存储在持续时间设置的末尾

转载 作者:行者123 更新时间:2023-11-29 06:31:37 26 4
gpt4 key购买 nike

我有一个 Java 进程,我使用以下选项启动它(如此处建议:parameters for FR):

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=2m,filename=myflightrecord.jfr -XX:FlightRecorderOptions=maxsize=100k,maxage=1m

为了获得飞行记录器信息。

我希望 ma​​xage=1m 只会给我一分钟的记录,而 ma​​xsize=100k 文件大小不会大于 100Kb,但没有一个它们确实按预期工作。

我遇到的另一个问题是我希望每隔一段时间存储一次文件,假设每隔一分钟。但是文件“myflightrecord.jfr”在达到持续时间(示例中为 2 分钟)之前是空的。

有没有办法让飞行记录器在持续时间结束前刷新?

ps:我使用的Java版本是JDK1.8.0_45

最佳答案

这适用于 JDK 7 和 JDK 8 (Hotspot),以及 JDK 5 和 6 (JRockit)。

首先,ma​​xsizema​​xage 仅在您有基于磁盘的记录时才有效,因为这些参数控制要保留在磁盘上的数据量。

如果你有内存记录(defaultrecording=true,disk=false),内存缓冲区的大小取决于正在使用的线程数,每个线程占用多少内存允许使用,全局缓冲区的数量等。

Flight Recorder 专为具有 GB 内存和 TB 磁盘的大型服务器而设计,因此我认为 JVM 无法遵守您提供的数字,即单个事件可能大于 100 kb,但通常情况下它们大约有 50-150 个字节。

其次,参数名称(ma​​xsizema​​xage)具有误导性。它不是最大大小/年龄,而是 JVM 在轮转时删除日志文件的阈值,通常每 12 MB 发生一次。为了最小化开销,JVM 不会在达到阈值时立即停止所有线程,这意味着数据溢出,因此实际上它是 12-15 MB。如果系统高度饱和,它可能会更多,比如 30-40 MB。

因此将 ma​​xsize 设置为 100k 将不起作用,您将始终至少获得 12 Mb,

如果您将 ma​​xage 设置为 1 分钟,您将获得 至少 一分钟的数据,如果它可以容纳大约一个日志文件的大小,可能会更长, 12-15 Mb。

如果您有内存记录,记录结束时数据会从内存缓冲区复制到磁盘。这就是为什么你的文件是空的。如果您希望 Flight Recorder 连续写入磁盘,您应该设置 disk=true

关于Java Flight Recorder 选项不起作用,文件仅存储在持续时间设置的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com