[英]100% old generation - is it an issue?
我们正在对应用程序进行负载测试,一段时间后AppDynamics报告红色的“ PS Old gen”为100% 。 Full GC每10分钟运行一次。 内存的“当前利用率”在70-90%之间变化,这种情况持续了数小时,并且在OOM中从未失败。
我以为,一旦旧发电利用率超过一定水平,GC就会尝试释放/压缩旧发电区域,如果没有任何释放,它将因OOM失败而在其之前开始疯狂的完整GC周期。 但是我看不到这些。 该应用程序运行良好,旧发电机利用率为100%。
我们正在使用Oracle Java 7u14(64b,4个cpu内核,10gb RAM),并且JVM配置为
-XX:+UseParallelOldGC -Xmx4g
谢谢!
这是否真正取决于您的决定。
一方面,每10分钟运行一秒钟的完整GC对于吞吐量而言不是一个重要问题。
另一方面,完整的GC可能会在那一秒钟的窗口内显着减少响应时间。 但这可能与您的应用程序无关紧要。
我担心的是您的负载测试是否是现实的测试。 该应用程序似乎需要测试4Gb的堆空间,但在实际使用中是否也需要它? 我担心在将其部署到生产中时可能会出现内存泄漏。 或负载测试中的负载导致应用程序的内存中缓存达到稳态,而该状态将不会在生产中复制。
通常,堆快要接近满了是一件坏事,因此建议增加堆。 您的应用程序的性能似乎并未受到影响,但是您可能会“风头正劲”。
我以为,一旦旧发电利用率超过一定水平,GC就会尝试释放/压缩旧发电区域,如果没有任何释放,它将因OOM失败而在其之前开始疯狂的完整GC周期。
我怀疑监视报告可能会误导您。 如果整个GC周期实际上没有回收任何东西,我希望行为会有所不同。
尝试打开JVM GC日志消息,看看它们告诉您有关整个GC周期设法回收的内存量的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.