性能问答>JVM Full GC 频率的问题>
2回复
4年前

JVM Full GC 频率的问题



现在遇到了这么一个问题,线上的 JVM minor GC 约 5 分钟一次,老年代比较缓慢的持续增长,需要约 50 天才能增长到 CMS 垃圾回收器的回收阈值比例(70%),也就是说在这期间一次 Full GC 也没有发生。但是由于公司内存的报警是根据物理机内存占用比例触发,目前设置的堆(只是堆,不包括 Metaspace 等)大小占物理内存的 86%,所以这就产生一个我认为比较奇怪的问题: 触发了内存报警,然而实际上一次 Full GC 都没有发生。

我目前想到的优化思路是:

  • 减少进入老年代的对象的个数,即复用对象。
  • 提高性能,因为目前来看 CPU 占用率实际很低,进一步提高并发处理的线程数,争取在进入老年代之前完成数据的处理,本质上和 1 的思路一样。
  • 降低堆和物理内存的比例。

我有些困惑的就是:

  1. 我觉着单纯从 Full GC 的频率来看没有优化的必要,对不对?
  2. 其它的项目也有同样的问题,只不过快速的版本迭代(约 2 天发布一次)将此问题掩盖了,上面报警的项目迭代周期很长。
  3. Full GC 是否应该或者可以完全避免,换句话说,Full GC 没有那么可怕,只要控制在一定的频率、耗时就可以。

菜鸡一枚,没有什么经验,想问问各位大佬的看法。

4184 阅读
请先登录,查看2条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步