在 JDK Mission Control 中查看的 JFR 结果中的总分配是什么意思?

What does Total Allocation mean in the JFR result as viewed in JDK Mission Control?

提问人:Mkl Rjv 提问时间:9/8/2023 更新时间:9/11/2023 访问量:70

问:

我有一个奇怪的场景,我试图确定某些进程重新启动的根本原因。我们收集了一段时间的 JFR,我发现堆不会随着时间的推移而增长。堆的最大大小始终保持在 2 GiB 以下。

但是,我看到一个类的总分配约为 180+ GiB,而总物理内存仅为 128 GB。同一班级的总分配率为58.4%。但是,最大实时大小为 171 MiB。byte[]

另外,我看到“使用的大小”也相当高(125 GiB)。我在 JFR 配置文件的自动分析部分看到以下消息:

The maximum amount of used memory was 99.7 % of the physical memory available.
The maximum amount of memory used was 125 GiB. This is 99.7 % of the 126 GiB of physical memory available. Having little free memory may lead to swapping, which is very expensive. To avoid this, either decrease the memory usage or increase the amount of available memory.

我在这里很困惑。总分配是否意味着物理内存中的数据量?或者它只是分配了内存总量,但从那时起就被垃圾回收了?

内存管理 内存泄漏 分配 JFR JMC

评论


答:

0赞 Kire Haglin 9/8/2023 #1

该消息是由“物理内存不足”规则生成的。您可以通过查看消息文本和实现来验证该规则。

据我所知,它使用 OS_MEMORY_SUMMARY 事件,而不是与对象分配相关的事件。

评论

0赞 Mkl Rjv 9/8/2023
那么,这是否意味着“总分配”与物理内存中存在的数据量无关?
0赞 Kire Haglin 9/9/2023
这两个度量值是“操作系统可用的物理内存总量”和“正在使用的物理内存总量”。
0赞 Mkl Rjv 9/12/2023
对不起,以上哪项对应于“总分配”?
0赞 Kire Haglin 9/12/2023
这些描述物理内存。“总分配”是指对象分配,即新字节[1000]。如果某些对象是垃圾回收的,则总分配数可能会大于为物理内存显示的数字。
0赞 Mkl Rjv 9/13/2023
因此,如果我们在总分配中看到某个类的计数异常高,这是否表明内存泄漏?或者只是某个类有很多实例被分配和解除分配(通过垃圾回收),并且不会严重影响物理内存?