文章目录

  • 背景
  • 一、告警分析
  • 二、原因分析
    • 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)相关推荐

  1. 记一次服务器负载飙高排查过程

    记一次服务器负载飙高排查过程 问题描述 在前天呢,我们公司的三台部署着php项目的线上服务器A.B.C,其中一台服务器A出现了CPU负载飙高,与其他两台服务器相差好几倍,并且在前天之前都没有出现过这么 ...

  2. linux服务器CPU飙高排查

    文章目录 前言 一.第一步 top 二.根据pid查找具体线程 2.根据pid找到16进制 3. 根据进程和线程查找原因 总结 前言 系统cpu飙高,尤其对于后端人员来说,其实应该学会排查,这样也算是 ...

  3. linux服务器cpu飙高问题排查实践记录

    问题描述: 测试环境大量请求出现504错误 1.第一反应上服务器看看资源消耗情况(登陆服务器时出现卡顿) 2.使用top命令查看cpu消耗情况,查看结果如下: 很明显cpu使用率已经满了(两核CPU) ...

  4. JVM中如何排查CPU飙高的问题

    1.虚拟机对象布局 布局:对象头.实例数据.对齐填充 对象头: Mark Word 8字节,hashcode值.GC分代信息.偏向锁信息:                       Class Po ...

  5. Mysql导致CPU飙高的问题

    出现CPU飙高时操作 出现cpu飙高时使用先试用top命令查看进程,确定是java进程还是mysql 找到进程号 <pid> 一.如果是mysql 1.那么使用mysql终端或者数据库链接 ...

  6. 简单的cpu飙高问题定位脚本

    原文链接: https://blog.csdn.net/manzhizhen/article/details/79333676 老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是 ...

  7. jvm 崩溃日志设置_记一次JVM疯狂GC导致CPU飙高的问题解决

    背景 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高,重启tomcat之后CPU恢复正常,半天或者一天之后又会出现同样的问题.解决问题首先要找到问题的爆发点,对于 ...

  8. 生产环境CPU飙高问题解决,记一次完整解决过程

    一.发现问题 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值Q ...

  9. 记一次jvm疯狂gc导致CPU飙高的问题解决

    在环境上遇到tomcat频繁gc导致cpu load飙高的问题,本来想自己写一个文章的,看到这个偷懒转载一下. 线上web服务器不时的出现非常卡的情况,登录服务器top命令发现服务器CPU非常的高. ...

最新文章

  1. 廉颇老矣,尚能饭否?响鼓重擂,上阵杀敌!
  2. python字符串截取_Python-变量-No3
  3. android平板2018,荣耀平板5和ipad2018哪个值得买 荣耀平板5和ipad2018哪个好
  4. Android 进程间通信——AIDL
  5. 第7章[7.18] Ext JS组件嵌入HTML页面
  6. 计算机主机制作过程,计算机主机箱的制作方法
  7. mongodb日志分析工具mtools之mplotqueries
  8. 从cross entropy 推导到 KL Divergence
  9. Awesome-Windows
  10. win7计算机系统减肥,win7系统精简瘦身的操作方法
  11. Detected applied migration not resolved locally:
  12. 乳清蛋白和支链氨基酸不得不说的关系
  13. 阿卜杜拉国王科技大学的计算机,阿卜杜拉国王科技大学(KAUST)探索奖学金项目...
  14. 小学生python编程写游戏_教你如何像玩游戏一样学Python
  15. RK3399平台开发系列讲解(应用开发篇)1.12、RTC闹钟唤醒
  16. 多路选择器MUX总结-IC学习笔记(八)
  17. 多分类f1分数_分类模型的F1-score、Precision和Recall 计算过程
  18. 香港电影金像奖23年全面回顾
  19. 图解在VC里使用graphics.h绘图(类似TC)
  20. 巴萨“青梅竹马”力量震惊世界 梅西小法19球占79.2%

热门文章

  1. 【论文阅读】End-to-End Model-Free Reinforcement Learning for Urban Driving Using Implicit Affordances
  2. np.argmax()函数
  3. 实时全局光照(Real-time Global Illumination)与Reflective Shadow Maps(RSM)
  4. (二)python 基础教程
  5. 【智力题 01】猜凶手
  6. SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名
  7. ABB_IRB120动力学仿真
  8. clover安装Mac big sur卡在Attempting system restart...MACH Reboot
  9. vue引入 SuperMap 超图
  10. N²logN和NlogN​​²具有相同的增长速度