生产环境 JVM 内存溢出案例分析

本文介绍了在生产环境中遇到JVM内存溢出问题的分析与处理流程。首先,通过隔离故障服务器来快速恢复业务,同时保留现场进行问题分析。接着,通过日志确定内存溢出类型,收集Dump文件,利用jmap或JVM参数生成。最后,使用MAT工具分析Dump文件,找出内存消耗源头,揭示了由于大量数据库查询结果导致的内存溢出问题,并提出通过深入分析堆栈和视图定位具体SQL语句的策略。
摘要由CSDN通过智能技术生成
  • JMX 不可用,往往是由于垃圾回收时间停顿时间过长、内存溢出等问题引起的。
  • 线上故障分析的原则是首先要采取措施快速恢复故障对业务的影响,然后才是采集信息、分析定位问题,并最终给出解决办法。

具体分析过程如下。

1、如何快速恢复业务

通常线上的故障会对业务造成重大影响,影响用户体验,故如果线上服务器出现故障,应规避对业务造成影响,但不能简单的重启服务器,因为需要尽可能保留现场,为后续的问题分析打下基础。

那我们如何快速规避对业务的影响,并能保留现场呢?

通常的做法是隔离故障服务器。

通常线上服务器是集群部署,一个好的分布式负载方案会自动剔除故障的机器,从而实现高可用架构,但如果未被剔除,则需要运维人员将故障服务器进行剔除,保留现场进行分析。

发生内存泄露,通常情况下是由于代码的原因造成的,一般无法立即对代码进行修复,很容易会发送连锁反应造成应用服务器一台一台接连宕机,故障面积会慢慢扩大,针对此种情况,应快速定位发生内存泄露的原因,将该服务进行降级,避免对其他服务造成影响。最简单的降级方法是根据 F5(Nginx)转发策略,对该功能定向到一个单独的集群,与其他流量进行隔离,确保其他业务不受牵连,给故障排查、解决提供宝贵的缓冲时间。

1.1 分析解决问题

首先可以通过查看日志,确定是哪种内存溢出,堆内存溢出可发生的地方:Java heap space(堆空间)、perm space(持久代)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值