线上频繁GC怎么处理

1.故障突发

频繁GC会导致接口变慢,系统明显卡顿。首先当然是以最快的速度恢复系统的正常使用,然后组织相关干系人进行快速决策会议,进行事故原因排查,定位问题的根本原因。

2.故障恢复

1.先查看是否是新上线的版本代码导致的?如果是则先回滚到上一版本。

2.如果是旧代码导致的,只不过现在问题才暴露出来。这时候可以使用机器扩容、服务重启、接口限流等手段来维持服务的正常运行,给问题定位争取一定的时间。

3.问题定位

通过监控或者 GC 日志,我们可以观察到每次 FULL GC 后是否都能正常回收内存,但是内存很快又被占满了,从而出现频繁 FULL GC。

这个情况可能是因为如下原因导致:

  • 新生代 Eden 区内存配置太小,导致大量新创建的对象直接进入老年代,导致老年代迅速被占满。
  • 服务器的内存配置满足不了现有的业务量,如果代码本身没有问题的话,优先对内存进行扩容

如果每次 FULL GC 只能回收一点点内存,不能正常回收内存,从而导致频繁GC。可通过 jmap -histo 命令并结合 dump 堆内存文件作进一步分析,查看是哪个对象占用了大量内存不释放,从而定位到出问题的具体代码位置。修改测试后进行紧急版本上线。

你可能感兴趣的:(jvm,java,linux)