【后端】生产环境接口突然变慢的原因排查并修复

一:skywalking日志监控发现问题

因为处理时间过了一个月再回头写文章,所以只能凭记忆大概写写
在这里插入图片描述当时是每天巡查过程中在jvm日志中发现,服务器内存爆了。接口响应非常慢,经常超时报错。因为是新项目上线,很难通过对比代码更新来缩小问题范围,排查难度较大。

初步判断

那根据以往经验,结合项目本身,将目标先放在Mongodb连接管理,http请求管理,文件读写管理,闭包变量管理上。

  1. 将生产环境的5个服务器节点减少到4个,足够支撑日常业务,另一个作为准测试服务器
  2. 将Mongodb连接全部添加关闭代码,http请求完释放,确认所有文件的读写关闭,闭关变量没有造成互相引用并正确释放
  3. 新包打上准测试,并进行压力测试,问题依然存在。

初步调试失败,进行深入问题排查

服务器

  1. top打印cpu占用情况,查到某个进程占用cpu高TheadId
  2. top -H -p XXXX,查看当前进程的线程cpu占用情况
  3. printf “%x \n” XXXX(线程id), 例如得到MMMM
  4. jstack -l XXXX >> jstack.txt拿到内存日志
  5. jstat -gc XXXX 5000 查看内存GC情况
  6. jmap -dump:file=A.hprof TheadId(进程id),将内存dump出来
  7. MemoryAnalyzer内存分析工具分析dump出来的日志
  8. 根据内存占用最多的实例发现是引入了公司的basic基础包,AliOssUtil类
  9. 代码排查发现OSSClient没有关闭
  10. .添加内存释放代码,重新上线,压测通过,问题解决
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值