当前位置: 首页 > 知识库问答 >
问题:

JVM内存充足,但频率已满gc

邓昊天
2023-03-14

JVM选项:-Xms512M-Xmx512M-XX:PermSize=70M-XX:MaxPermSize=70M

jstat-gc 8260 5000

S0C:512.0 S1C:512.0 S0U:0.0 S1U:0.0 EC:174080.0 EU:0.0 OC:349696.0 OU:45191.1 PC:71680.0 PU:34882.2 YGC:2216225 YGCT:6754.909 FGC:2216144 FGCT:160651.466 GCT:167406.375

S0C:512.0 S1C:512.0 S0U:0.0 S1U:64.0 EC:174080.0 EU:0.0 OC:349696.0 OU:45187.3 PC:71680.0 PU:34882.2 YGC:2216253 YGCT:6755.047 FGC:2216172 FGCT:160653.488 GCT:167408.535

S0C: 512.0 S1C: 512.0 S0U: 0.0 S1U: 128.0 EC: 174080.0欧盟: 0.0 OC: 349696.0 OU: 45189.6 PC: 71680.0 PU: 34882.2 YGC: 2216281 YGCT: 6755.180 FGC: 2216200 FGCT: 160655.542 GCT: 167410.721

S0C: 512.0 S1C: 512.0 S0U: 0.0 S1U: 0.0 EC: 174080.0欧盟: 1775.6 OC: 349696.0 OU: 45187.3 PC: 71680.0 PU: 34882.2 YGC: 2216308 YGCT: 6755.309 FGC: 2216227 FGCT: 160657.627 GCT: 167412.936

S0C:512.0 S1C:512.0 S0U:128.0 S1U:0.0 EC:174080.0 EU:0.0 OC:349696.0 OU:45187.3 PC:71680.0 PU:34882.2 YGC:2216336 YGCT:6755.444 FGC:2216255 FGCT:160659.701 GCT:167415.146

为什么JVM频率满gc会发生?

共有3个答案

金泉
2023-03-14

当堆和堆栈内存看起来不错时,尝试查找有关“直接内存”的内存泄漏。在我的例子中,Netty5-ByteBuf的一部分没有发布。

高鸿振
2023-03-14

你的幸存者空间非常小。只有512KB。如果幸存者空间在清理伊甸园空间时被填满,则会触发完整GC。

由于您的伊甸园空间约为300 x大,如果它们没有填满,我会感到惊讶。

我想检查一下,你没有创建很多非常短命的对象,这就是为什么JVM认为几乎没有任何东西幸存下来。

例如,查看是否可以在不创建对象的情况下解析/处理UDP数据包。

支淮晨
2023-03-14

很难说,但一种可能的解释是您重复分配和丢弃非常大的数组。

如果我正确解释了统计数据,伊甸园空间是174MB,幸存者空间是0.5MB,旧空间是349MB。如果您分配的数组太大,无法放入Eden空间,那么它将直接分配到旧空间。如果旧空间已填充,则可能会触发完整GC。

“大”有多大?嗯,这很复杂,因为还有TLAB及其大小的问题,预拉伸尺寸reshold选项以及不同类型GC之间的差异。阅读Martin Thompson的“Java垃圾收集蒸馏”,让您开始了解这些问题。

如果这不是问题所在,那么您需要对堆中发生的事情进行更深入的调查。弄清楚对象的组合是什么,它们的速率和分配/处置模式等,试图弄清楚为什么这么多对象最终会出现在旧空间中。

在3-5天工作正常后,就会发生这种情况

这往往表明在运行的三到五天内,应用程序的内存数据结构中正在积累一些东西。调查这种情况。

 类似资料:
  • 即使在相当小的数据集上,我也会遇到堆空间错误。我可以确定我没有耗尽系统内存。例如,考虑一个包含大约20M行和9列的数据集,它占用了磁盘上的1GB。我正在一个具有30gb内存的Google Compute节点上玩它。 假设我在一个名为df的数据框中有这些数据。以下操作很好,但速度有点慢: 下面抛出java。lang.OutOfMemoryError:Java堆空间。 我尝试了这个建议,以增加要激发的

  • 我的JBoss服务器出现了一个奇怪的问题:引发的异常: 我寻找内存不足的情况,但内存可用性看起来很好: 以前有没有人遇到过这个GC异常,当时似乎内存很大?

  • 我一直在使用G1垃圾收集器经历Java VM崩溃。我们得到使用以下签名生成的hs_err_pid.log文件:

  • 问题基于Oracle Hotspot JDK8。 我想,当应用程序遇到异常时,可能有两个原因。 分配的JVM堆大小达到指定大小,GC系统无法挤出足够的空间。 分配的JVM堆没有到达,但是没有足够的物理内存使JVM堆增长。假设<. 我用@Eugene在Answer中提供的代码做了一些实验。正如@Holger所指出的,结果在不同的环境中有所不同。我使用Hotspot JDK8 x64在CentOS x

  • 我有一个问题:伊甸园100%使用,旧的100%使用,从空间100%使用,但没有垃圾收集触发,没有oom -xmx2g-xms2g-xmn1g-xx:survivorratio=8-xx:permsize=256m-xx:maxpermsize=256m-xx:+heapdumponoutofmemoryerror-xx:reservedcodecachesize=128m-xx:initialco

  • pip识别全局安装的软件包-( 我用VirtualVWrapper预激活钩子清理蟒蛇, 然后echo$PYTHONPATH返回空字符串,但这没有帮助。 发生了什么?