线上 CPU 飚高问题该如何定位问题呢?

是因为线程太多,导致上下文切换?
还是因为应用代码中出现了死循环?
还是GC频繁导致 CPU 突然飙升?
该如何入手呢?

首先要知道那些情况会导致 CPU 的突然飙升:

  1. 频繁GC,访问量高时,有可能造成频繁的GC、甚至FGC。当调用量大时,内存分配过快,就会造成GC线程不停的执行,导致CPU飙高
  2. 序列化与反序列化,例如应用代码执行xml解析时,调用量增大的情况下,可能导致了CPU被打满
  3. 加密、解密
  4. 正则表达式校验(正则匹配回溯问题)
  5. 线程上下文切换、当启动了很多线程,而这些线程都处于不断的阻塞状态(锁等待、IO等待等)和执行状态的变化过程中。当锁竞争激烈时,很容易出现这种情况
  6. 某些线程在做无阻塞的运算,简单的例子while(true)中不停的做运算,没有任何阻塞。写程序时,如果需要做很久的计算,可以适当将程序sleep下

实际案例
在一次生产切库时,暂停了 kafka 的消费,大概切了8个小时,导致 kafka 内堆积了大量的数据(ps:一些统计数据),当重新启动消费的时候,CPU 迅速打满。
排查问题:
因为在消费kafka时,使用了多线程进行消费,并且使用了 Executor 框架提供的 Executors.newFixedThreadPool(50),设置了 50,导致产生大量的线程在做上下文切换
vmstat 可以查看线程上下文切换的频率

vmstat 1 10


参考文章:Linux vmstat命令详解

将线程数降为6,CPU 恢复正常。

这是在明确知道可能出现CPU飙升出现的情况。
大多数情况下是不会明确知道问题出在哪里的?那该如何进行排查呢?

  1. 使用 top 命令查找 cpu 占比最高的线程
top


2. 根据前面的 pid,使用 top -H -p pid 查看该进程的线程信息,查看是那个线程耗费 CPU

top -H -p pid
  1. 找到占用 cpu 最高的线程的 pid,例如 88
  2. 使用 printf “%x\n” 88,打印该线程的 16 进制数值
print "%x\n" 88
58
  1. 使用 jstack 命令将进程 pid 的堆栈信息倒出来
jstack pid > pid.log
  1. 打开 pid.log, 查找 线程 nid 为 58 的线程即为 cpu 最高占用的线程。

tips
现在大部分应用都是使用docker运行,在查找的过程中,如何对应docker内的进程pid与宿主机的进程pid
使用 docker top name


如上 pid 即为该 docker 镜像在宿主机中的pid

一个可以在线分析堆栈信息的网站:https://fastthread.io/

记一次CPU突然飙升到 100% 问题排查相关推荐

  1. java 正则 cpu 100_这六个原因真的可以使Java应用程序的CPU使用率飙升到100%吗?...

    点击上方的"代码农户的冥想记录",然后选择"设为明星" 高质量文章,及时交付 问题 1. 无限while循环会导致CPU使用率飙升吗? 2.经常使用Young ...

  2. cpu飙升 死循环_记一次CPU飙升BUG

    一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...

  3. 记一次CPU飙升的问题分析解决思路(转)

    一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...

  4. MySQL数据库CPU飙升到100%解决方案

    1.定位cpu问题所在 当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理. 2.查看慢查询日志 进入mysql命令行 m ...

  5. MySQL数据库cpu飙升到100%的话怎么处理?

    当 cpu 飙升到 100%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的, 如果不是,找出占用高的进程,并进行相关处理. 如果是 mysqld 造成的, show proce ...

  6. java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?

    问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...

  7. CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”

    最近负责的一个老项目CPU时不时的就会飘到90%以上,然后宕掉,这个项目是一个汽车类的商城支持在线下单预约试驾等功能,咨询品牌方说是做了一波投放,但是没有提前通知我们,看了一波日志其实请求量也不是特别 ...

  8. 关于CPU使用率飙升,我们需要了解什么?

    关注.星标公众号,直达精彩内容 1.CPU 使用率怎么计算? CPU% = (1 - idleTime / sysTime) * 100 idleTime:CPU处于空闲状态的时间 sysTime:C ...

  9. 2022我是如何拿到小米、京东、字节的offer,什么会导致Java应用程序的CPU使用率飙升

    前言 爱因斯坦说过"耐心和恒心总会得到报酬的",我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在"我"身上实现了. 每一个程序员都拥有一座大厂梦,我也不 ...

最新文章

  1. 2017年你不能错过的Java类库
  2. MySQL 8.0 技术详解
  3. linux 查看内核属性,怎么查看linux操作系统
  4. ARM AMBA 外围设备 的datasheet
  5. CVPR 2021 | 商汤提出最强时序动作提名修正网络:TCANet
  6. C# 属性、索引器(二)
  7. 扇贝单词里有计算机英语吗,扇贝单词英语版
  8. 如何将macOS应用程序打包为dmg文件
  9. 小米网卡驱动linux,小米笔记本pro 15.6寸安装ubuntu16.04无法使用wifi的解决方法
  10. Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
  11. 简单的前端文件预览下载功能
  12. python为什么用号做注释符_Python 为什么用 # 号作注释符?
  13. 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理
  14. WebSocket 协议以及 Socket 接口
  15. 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现
  16. 计算机视觉 马尔_基于视觉AI的智能车牌识别相机,识别更精准功能更强大
  17. 数据结构实验(C++实现):二叉树操作
  18. 强化学习——探索与利用基本方法
  19. 考研院校选择的一些看法
  20. 安装Python遇到“0x80070643发生严重错误”

热门文章

  1. ECCV 2020 Representation Learning on Visual-Symbolic Graphs for Video Understanding
  2. flowable工作流的使用
  3. 图像处理算法之变老特效
  4. Adobe Brackets
  5. vue项目浏览器兼容问题
  6. 感量越大抑制频率约低_磁环抗干扰选择
  7. 嬴彻科技CEO马喆人:构建智能卡车物流网络,引领自动驾驶落地
  8. C++ 中explicit关键字详解
  9. 开发过程中应该遵守哪些编码规范和class命名规范?
  10. 十大集成灶火星人电商销售7年蝉联桂冠,再战618战绩如何?拭目以待