记一次服务器CPU飙高使用率超过100%原因分析(Arthas)
文章目录
- 背景
- 一、告警分析
- 二、原因分析
- 1.找到java进程
- 2.进入 Arthas
- 3. 使用 Arthas 找到CPU占用最高的线程
- 4.定位原因
- 5.解决方案
- 总结
背景
某天下午频繁收到预发环境应用CPU告警;预发环境一般是项目、日常等即将上线时做最后回归时使用。出现CPU告警大概率是有新代码出现性能问题,一定要及时排查定位出来,绝对不能把问题带到线上;
一、告警分析
容器平均CPU使用率超过80%,告警比较频繁,平均每分钟都会产生一次告警;(告警信息如下图)
线上与预发环境CPU使用情况对比分析:告警主要发生在预发环境、线上CPU使用率正常;
二、原因分析
1.找到java进程
使用top命令,找到java进程的PID
2.进入 Arthas
在服务器上打开并进入 Arthas(安装入门见 Arthas 用户文档),如果服务器上有多个java进程,选择需要排查问题的 PID 进入:
3. 使用 Arthas 找到CPU占用最高的线程
方法1、输入 thread -n 3 会列举出当前三个占用CPU最高的线程,根据图中可以定位到具体的业务代码行数
方法2:使用 dashboard 查看java应用运行情况
可以看到占用CPU较多的线程都是:ConsumerImplV2-ClientBusiness-*****score_b,继续深入排查,找到其中一个线程,观察线程运行情况,执行命令:thread 1070 查看结果:
at com.xxx.xxx.xxx.biz.service.xxx.XLock.unlock(XLock.java:166)
at com.xxx.xxx.xxx.biz.service.xxx.XLock.executeWithLock(XLock.java:106)
at com.xxx.xxx.xxx.biz.service.statistics.impl.ScoreDataChangeInnerServiceImpl.reCount(ScoreDataChangeInnerServiceImpl.java:60)
at com.xxx.xxx.xxx.biz.service.statistics.impl.ScoreDataChangeInnerServiceImpl.reCountBatchLimit(ScoreDataChangeInnerServiceImpl.java:78)
at com.xxx.xxx.xxx.biz.service.statistics.impl.ScoreDataChangeInnerServiceImpl$$FastClassBySpringCGLIB$$c86131bb.invoke(<generated>)
这里已经基本确认问题代码位置了,接下来继续分析代码;
4.定位原因
通过 ScoreDataChangeInnerServiceImpl 类中的相关日志,定位到某个正式商家在预发环境存在大量数据变更,产生大量数据变更消息消息,而预发是单机部署,一直在消费消息占用CPU较高;
因为正式商家的流量不会到预发环境,所以这里基本可以确定是某位同学在预发环境刷数据导致的,而并不是文章前面判断的“问题代码”导致;
5.解决方案
1、找到相关同学,同步不要再预发环境刷数据,因为预发环境部署的代码也算是上线前的测试代码,没有最终测试验收完成可能存在隐藏的bug。如果刷数据触发了bug,那么可能引起生产环境数据错乱,问题就更大了。
2、所以先将消息暂停消费(临时方案,此文重点分享服务器 CPU 飙高的排查分析过程,最终解决方案这里不细讲), 由于需要保证商家店铺统计数据的准确性,所以消息不能丢弃。
消息暂停消费后,观察预发环境 CPU 使用情况:
总结
1、人是活的,要学会灵活使用方法,当工作经验丰富了,凭借经验对问题定位分析能够剩下不少时间;
2、敬畏线上,当预发环境出现问题就已经在警告我们线上可能也会出现问题,一定要及时介入排查;
3、海因里希法则:在机械生产过程中,每发生330起意外事件,有300件未产生人员伤害,29件造成人员轻伤,1件导致重伤或死亡;对应到我们软件开发中也适用,每 300 次轻微问题(例如:告警、ERROR日志等)会有29次线上问题产生(例如:线上bug、商家反馈等)1次故障产生;所以不要轻视每一次问题,你不解决问题,你就会成为问题;
记一次服务器CPU飙高使用率超过100%原因分析(Arthas)相关推荐
- 记一次服务器负载飙高排查过程
记一次服务器负载飙高排查过程 问题描述 在前天呢,我们公司的三台部署着php项目的线上服务器A.B.C,其中一台服务器A出现了CPU负载飙高,与其他两台服务器相差好几倍,并且在前天之前都没有出现过这么 ...
- linux服务器CPU飙高排查
文章目录 前言 一.第一步 top 二.根据pid查找具体线程 2.根据pid找到16进制 3. 根据进程和线程查找原因 总结 前言 系统cpu飙高,尤其对于后端人员来说,其实应该学会排查,这样也算是 ...
- linux服务器cpu飙高问题排查实践记录
问题描述: 测试环境大量请求出现504错误 1.第一反应上服务器看看资源消耗情况(登陆服务器时出现卡顿) 2.使用top命令查看cpu消耗情况,查看结果如下: 很明显cpu使用率已经满了(两核CPU) ...
- JVM中如何排查CPU飙高的问题
1.虚拟机对象布局 布局:对象头.实例数据.对齐填充 对象头: Mark Word 8字节,hashcode值.GC分代信息.偏向锁信息: Class Po ...
- Mysql导致CPU飙高的问题
出现CPU飙高时操作 出现cpu飙高时使用先试用top命令查看进程,确定是java进程还是mysql 找到进程号 <pid> 一.如果是mysql 1.那么使用mysql终端或者数据库链接 ...
- 简单的cpu飙高问题定位脚本
原文链接: https://blog.csdn.net/manzhizhen/article/details/79333676 老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是 ...
- jvm 崩溃日志设置_记一次JVM疯狂GC导致CPU飙高的问题解决
背景 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题.解决问题首先要找到问题的爆发点,对于 ...
- 生产环境CPU飙高问题解决,记一次完整解决过程
一.发现问题 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值Q ...
- 记一次jvm疯狂gc导致CPU飙高的问题解决
在环境上遇到tomcat频繁gc导致cpu load飙高的问题,本来想自己写一个文章的,看到这个偷懒转载一下. 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高. ...
最新文章
- 廉颇老矣,尚能饭否?响鼓重擂,上阵杀敌!
- python字符串截取_Python-变量-No3
- android平板2018,荣耀平板5和ipad2018哪个值得买 荣耀平板5和ipad2018哪个好
- Android 进程间通信——AIDL
- 第7章[7.18] Ext JS组件嵌入HTML页面
- 计算机主机制作过程,计算机主机箱的制作方法
- mongodb日志分析工具mtools之mplotqueries
- 从cross entropy 推导到 KL Divergence
- Awesome-Windows
- win7计算机系统减肥,win7系统精简瘦身的操作方法
- Detected applied migration not resolved locally:
- 乳清蛋白和支链氨基酸不得不说的关系
- 阿卜杜拉国王科技大学的计算机,阿卜杜拉国王科技大学(KAUST)探索奖学金项目...
- 小学生python编程写游戏_教你如何像玩游戏一样学Python
- RK3399平台开发系列讲解(应用开发篇)1.12、RTC闹钟唤醒
- 多路选择器MUX总结-IC学习笔记(八)
- 多分类f1分数_分类模型的F1-score、Precision和Recall 计算过程
- 香港电影金像奖23年全面回顾
- 图解在VC里使用graphics.h绘图(类似TC)
- 巴萨“青梅竹马”力量震惊世界 梅西小法19球占79.2%
热门文章
- 【论文阅读】End-to-End Model-Free Reinforcement Learning for Urban Driving Using Implicit Affordances
- np.argmax()函数
- 实时全局光照(Real-time Global Illumination)与Reflective Shadow Maps(RSM)
- (二)python 基础教程
- 【智力题 01】猜凶手
- SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名
- ABB_IRB120动力学仿真
- clover安装Mac big sur卡在Attempting system restart...MACH Reboot
- vue引入 SuperMap 超图
- N²logN和NlogN​​²具有相同的增长速度