记一次cpu占用过高问题排除

2 篇文章 0 订阅

目录

 

前言

问题定位

解决方案

后记


前言

项目采用的是springcloud微服务框架,注册中心选用nacos-1.0.0版本,在项目版本迭代过程中突然出现问题,项目持续运行过程中,出现某个工程查询全部中断,项目从注册中心下线的问题;通过问题定位发现,此项目中存在cpu占用超100%的线程;

问题定位

项目所有接口报500错误,通过top命令查看到498526进程CPU占用100%,通过jps -ml发现此进程是项目中的某个微服务进程,初步定位到时此微服务出了问题

查看这个进程中所有线程的资源使用情况,执行top -Hp 498526,结果如下;找到cpu占用100%的线程id是498599

拿到问题线程的线程id之后,去获取该线程的堆栈信息,首先将线程id转换为16进制,执行 printf "%x \n" 498599 的到线程id的16进制编码79ba7,然后通过jstack 498526 | grep  '79ba7' -A10命令去查看该线程的堆栈信息如下;发现此线程一直在执行GC操作,那么问题原因就是该线程,中存在释放不掉的大对象,导致一直GC,CPU专用100%,从而拖垮该微服务;

那么,接下来的工作就是查看该进程的dump文件,分析到底是哪个类导致大对象的持续产生又无法被GC回收,执行jmap -F -dump:format=b,file=498526.dump 498526, 使用-F是强行挂起导出命令,避免cpu占用过高报错。

查看dump文件看出,是nacos的ClientWorker类导致的问题。查看nacos的gc日志显示如下;自行搜索相关问题,得知nacos client 客户端存在cpu占用100%的问题,参考:Nacos client 客户端cpu占用100% 问题排查和解决方案

 

解决方案

升级nacos服务端与客户端版本到1.4.0

后记

本实践结合自身项目自身运行问题,对CPU飙升问题排除方案与技术进行了实践,效果明显;如果有兴趣交流知识图谱,请联系作者,见二维码,欢迎交流指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仔仔1993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值