Full gc频繁如何解决,遇到OOM问题如何排查

Full GC

触发Full gc的表现形式

  • CPU满载告警
  • API响应时间过长
  • 内存反复波动
  • fullgc告警

常用的排查命令

jps: 查看本机java进程
jstack: 打印线程的栈信息,制作线程dump文件
jmap:打印内存映射信息,制作堆dump文件
jstat:性能监控工具
jhat:内存分析工具,用于解析堆dump文件并以适合人阅读的方式展示出来
jconsole: 简易的jvm可视化工具

Full gc发生的原因

  • System.gc() 方法调用
  • 老年代空间不足,新生代对象转入以及创建为大对象、大数组时候。如果Full gc后空间仍然不足,则抛出错误: java.lang.oom。
  • 永久代/元空间满了,存放class信息,当需要加载的类,反射的类和调用方法较多时候,未采用CMS GC 情况下执行Full gc。可以采用增大永久代方法

解决方法

1.如果每次gc之后剩余空间不大,说明有一部分顽固对象一直没有办法回收,导致可用内存变少,这种情况下容易oom
2.每次gc之后,剩余空间比较大,意味大部分对象都被清理了,但是系统又频繁gc,说明老年代涌入大量对象,新生代可能设置过小

oom排查

  1. 先查看启动参数是否有问题
  2. 内存快照分析:启动时候加入参数:HeapDumpOnOutOfMemoryError
  3. 然后使用memoryAnalyzer/jvisualvm分析

原因:
创建大对象/大数组
大量查询未分页
死循环

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值