在线服务内存使用率涨到100%如何排查?

上周在线服务程序内存突然上涨至100%,通过检查程序更新、请求日志和使用gstack等工具,发现是线程死循环导致。经过深入分析,最终定位为轮选算法的边界条件错误。通过gdb复现问题并修复,总结出问题解决的关键在于观察现象、掌握工具和及时介入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上周我们的在线服务程序忽然开始出现内存异常现象,程序的内存会在某个时刻起突然上涨,内存使用率一直涨到100%。我们做了几项针对性的排查:检查程序最近上线内容、使用问题机器的请求日志进行线下反演、登录异常机器查看gstack等,均未能找到问题原因。

周五晚上和周六早上问题开始变得很严重,有几十台机器频繁出现内存异常告警,虽然这些机器在内存使用率上涨到100%后,程序过段时间会自动重启,但还是很影响在线服务的稳定性。于是我们开始通过VPN登录公司内网,周末在家深入排查问题。

我们在机器监控平台查看有问题机器的内存变化曲线,发现正常情况下这台机器内存非常平稳,几乎是一条水平线,但是从某一时刻起内存开始突然上涨,并以稳定速率上涨,约一小时后内存达到100%,示意图如下:

我们的老大经验丰富,他注意到CPU和内存同时上涨,当即推测是程序的某个线程进入死循环,不停的分配内存导致。我们的机器CPU是16核,一个核被打满占比约为6%(1/16×100%),这与CPU曲线变化非常吻合。

接下来,我们找到一个内存使用率上涨到100%,还没有被自动重启的机器,远程登录到这台机器,通过执行"top -H -p 程序PID"命令查看具体是哪个线程占用cpu最高,找到其线程号。top默认是按各线程的CPU使用率排序,top内容示意图如下&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值