线上golang grpc服务资源泄露问题排查

前几天告警群里报出一个go服务grpc接口出现很多超时现象,排查发现是服务有内存泄露与cpu占用高的问题,在这里将排查的过程记录一下,给大家提供排查问题的方向与思路,同时借鉴教训,优化自己服务代码。

发现超时现象后,登录机器看了下top,该服务总共有两台机器,发现02机器的cpu与内存占用很高(如下图第一个进程),而01机器都很低。
正常情况下不会有这么高的资源占用,可能是服务有资源泄露的问题,资源一致得不到释放。首先做的,是重启服务,优先解决问题,资源泄露的问题可以通过重启来快速解决,重启后接口超时现象不再出现,接口耗时恢复正常。
在这里插入图片描述
重启后,开始排查问题,超时的服务是B服务,上游有A服务调用B服务,从A服务中找了几个超时的请求,根据opentracing生成的tracer_id查询日志,发现A服务调用B服务超时5s就返回错误了,B服务收到了A服务的请求,发现有两种情况,一种是B立即收到了A的请求,但是处理了400+秒才返回;另一种是A发出请求400+秒后,B才开始处理请求。

另外发现grpc请求全部打到一台机器上,另一台机器没什么量。

然后去看了下历史cpu、内存曲线,发现cpu在15分钟内上升至很高,同时内存占用很高的现象。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值