Java连续GC,ParOldGen耗尽

标签 java garbage-collection google-cloud-platform

我们有一个大型 Java 应用程序在 Google Cloud 托管的 VM 上运行(我认为这限制了我们控制 JVM 调整参数的能力)。

我们在 RAM 中有数百万个对象(大约 15GB)。

在执行一项可能涉及创建数万个对象(解析巨大的 Excel)的任务时,系统可能由于垃圾收集而卡住了几分钟。

我们注意到总体而言我们的 RAM 并不低,但 ParOldGen 似乎已使用 99%。有什么建议可以避免这种情况吗?

Heap
 PSYoungGen      total 6083072K, used 267497K [0x000000064eb00000, 0x0000000800000000, 0x0000000800000000)
  eden space 6078464K, 4% used [0x000000064eb00000,0x000000065f03a438,0x00000007c1b00000)
  from space 4608K, 0% used [0x00000007c1b00000,0x00000007c1b00000,0x00000007c1f80000)
  to   space 528384K, 0% used [0x00000007dfc00000,0x00000007dfc00000,0x0000000800000000)
 ParOldGen       total 14198272K, used 14197939K [0x00000002ec180000, 0x000000064eb00000, 0x000000064eb00000)
  object space 14198272K, 99% used [0x00000002ec180000,0x000000064eaacc60,0x000000064eb00000)
 PSPermGen       total 65536K, used 50669K [0x00000002e1b80000, 0x00000002e5b80000, 0x00000002ec180000)
  object space 65536K, 77% used [0x00000002e1b80000,0x00000002e4cfb640,0x00000002e5b80000)

最佳答案

this article on Java GC 中所述, ParOldGen(或 Concurrent Old Gen (Mark Sweep) GC)在处理内存中的大量碎片时可能会在其“停止世界”阶段花费很长时间,这是您希望在这种对象繁重的模式中看到的.也许这值得一读,作为对正在发生的事情的解释?

至于increasing the heap size ,这可以通过 JVM 选项来完成,这些选项可以在使用自定义运行时/灵活环境应用程序时进行操作。您也可以configure the amount of memory each instance will have .

最后还可以select which GC algorithms should run使用 JVM 选项。您可能会发现在完全不使用 ParOldGen 的情况下应用程序的性能会更好。

关于Java连续GC,ParOldGen耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28682062/

相关文章:

java - 如何解决此错误 : "an unknown item is declared as the root of your mxml document"?

java - 用于故障排除的指标模式分析

java - JVM什么时候会触发主要垃圾回收?

java - 如果我有一个 Java 树,并将根设置为 NULL,所有节点都会被垃圾收集吗?

python - 使用python在谷歌云存储桶中创建文件夹

python-2.7 - apache beam 2.7.0 在 utf-8 编码法语字符中崩溃

java - 序列化日期 : Swagger and Spring-MVC

c# - 在对象成为孤立对象之前,我是否需要从对象中删除事件订阅?

linux - 无法通过 SSH 连接到 Linux GCP 实例

java - OptionalInt 作为输入参数