记一次CPU突然飙升到 100% 问题排查
线上 CPU 飚高问题该如何定位问题呢?
是因为线程太多,导致上下文切换?
还是因为应用代码中出现了死循环?
还是GC频繁导致 CPU 突然飙升?
该如何入手呢?
首先要知道那些情况会导致 CPU 的突然飙升:
- 频繁GC,访问量高时,有可能造成频繁的GC、甚至FGC。当调用量大时,内存分配过快,就会造成GC线程不停的执行,导致CPU飙高
- 序列化与反序列化,例如应用代码执行xml解析时,调用量增大的情况下,可能导致了CPU被打满
- 加密、解密
- 正则表达式校验(正则匹配回溯问题)
- 线程上下文切换、当启动了很多线程,而这些线程都处于不断的阻塞状态(锁等待、IO等待等)和执行状态的变化过程中。当锁竞争激烈时,很容易出现这种情况
- 某些线程在做无阻塞的运算,简单的例子while(true)中不停的做运算,没有任何阻塞。写程序时,如果需要做很久的计算,可以适当将程序sleep下
实际案例:
在一次生产切库时,暂停了 kafka 的消费,大概切了8个小时,导致 kafka 内堆积了大量的数据(ps:一些统计数据),当重新启动消费的时候,CPU 迅速打满。
排查问题:
因为在消费kafka时,使用了多线程进行消费,并且使用了 Executor 框架提供的 Executors.newFixedThreadPool(50),设置了 50,导致产生大量的线程在做上下文切换
vmstat 可以查看线程上下文切换的频率
vmstat 1 10
参考文章:Linux vmstat命令详解
将线程数降为6,CPU 恢复正常。
这是在明确知道可能出现CPU飙升出现的情况。
大多数情况下是不会明确知道问题出在哪里的?那该如何进行排查呢?
- 使用 top 命令查找 cpu 占比最高的线程
top
2. 根据前面的 pid,使用 top -H -p pid 查看该进程的线程信息,查看是那个线程耗费 CPU
top -H -p pid
- 找到占用 cpu 最高的线程的 pid,例如 88
- 使用 printf “%x\n” 88,打印该线程的 16 进制数值
print "%x\n" 88
58
- 使用 jstack 命令将进程 pid 的堆栈信息倒出来
jstack pid > pid.log
- 打开 pid.log, 查找 线程 nid 为 58 的线程即为 cpu 最高占用的线程。
tips
现在大部分应用都是使用docker运行,在查找的过程中,如何对应docker内的进程pid与宿主机的进程pid
使用 docker top name
如上 pid 即为该 docker 镜像在宿主机中的pid
一个可以在线分析堆栈信息的网站:https://fastthread.io/
记一次CPU突然飙升到 100% 问题排查相关推荐
- java 正则 cpu 100_这六个原因真的可以使Java应用程序的CPU使用率飙升到100%吗?...
点击上方的"代码农户的冥想记录",然后选择"设为明星" 高质量文章,及时交付 问题 1. 无限while循环会导致CPU使用率飙升吗? 2.经常使用Young ...
- cpu飙升 死循环_记一次CPU飙升BUG
一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...
- 记一次CPU飙升的问题分析解决思路(转)
一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...
- MySQL数据库CPU飙升到100%解决方案
1.定位cpu问题所在 当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理. 2.查看慢查询日志 进入mysql命令行 m ...
- MySQL数据库cpu飙升到100%的话怎么处理?
当 cpu 飙升到 100%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的, 如果不是,找出占用高的进程,并进行相关处理. 如果是 mysqld 造成的, show proce ...
- java进程cpu使用率高_什么会导致Java应用程序的CPU使用率飙升?
问题 无限循环的while会导致CPU使用率飙升吗? 经常使用Young GC会导致CPU占用率飙升吗? 具有大量线程的应用程序的CPU使用率是否较高? CPU使用率高的应用程序的线程数是多少? 处于 ...
- CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”
最近负责的一个老项目CPU时不时的就会飘到90%以上,然后宕掉,这个项目是一个汽车类的商城支持在线下单预约试驾等功能,咨询品牌方说是做了一波投放,但是没有提前通知我们,看了一波日志其实请求量也不是特别 ...
- 关于CPU使用率飙升,我们需要了解什么?
关注.星标公众号,直达精彩内容 1.CPU 使用率怎么计算? CPU% = (1 - idleTime / sysTime) * 100 idleTime:CPU处于空闲状态的时间 sysTime:C ...
- 2022我是如何拿到小米、京东、字节的offer,什么会导致Java应用程序的CPU使用率飙升
前言 爱因斯坦说过"耐心和恒心总会得到报酬的",我也一直把这句话当做自己的座右铭,这句箴言在今年也彻底在"我"身上实现了. 每一个程序员都拥有一座大厂梦,我也不 ...
最新文章
- 2017年你不能错过的Java类库
- MySQL 8.0 技术详解
- linux 查看内核属性,怎么查看linux操作系统
- ARM AMBA 外围设备 的datasheet
- CVPR 2021 | 商汤提出最强时序动作提名修正网络:TCANet
- C# 属性、索引器(二)
- 扇贝单词里有计算机英语吗,扇贝单词英语版
- 如何将macOS应用程序打包为dmg文件
- 小米网卡驱动linux,小米笔记本pro 15.6寸安装ubuntu16.04无法使用wifi的解决方法
- Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)
- 简单的前端文件预览下载功能
- python为什么用号做注释符_Python 为什么用 # 号作注释符?
- 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理
- WebSocket 协议以及 Socket 接口
- 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现
- 计算机视觉 马尔_基于视觉AI的智能车牌识别相机,识别更精准功能更强大
- 数据结构实验(C++实现):二叉树操作
- 强化学习——探索与利用基本方法
- 考研院校选择的一些看法
- 安装Python遇到“0x80070643发生严重错误”