随笔 - 547  文章 - 1  评论 - 292  阅读 - 33万

CPU100%排查分析指南

CPU100%排查分析指南

1 一次性获取的数据太多
随着系统上线时间的推移,线上的数据越来越多,系统出现了bug,我们每次获取到的都是全量的数据,并非增量的数据。
其根本原因是频繁的full gc

2 kafka自动确认
随着业务的发展,用户量越来越多,每天产生的kafka消息也越来越多。
后来,我们把kafka的consumer,消费消息后改成手动确认,cpu使用率100%的问题就被解决了。

3 死循环
死循环有两种:
在while、for、forEach循环中的死循环。
无限递归。
这两种情况,程序会不停的运行,使用寄存器保存循环次数或者递归深度,一直占用cpu,导致cpu使用率飙升。

4 多线程导数据
多线程导入数据,如果线程数量比较多,会存在大量线程上下文切换的过程,这个过程非常消耗CPU资源。

5 同步大量文件
由于涉及到了大量文件的同步,导致存放文件的那台应用服务器CPU飙升的很高。

6 死锁
为了防止并发场景中,多个线程修改公共资源,导致的数据异常问题。
很多时候我们会在代码中使用synchronized或者Lock加锁。
比如线程a拥有锁c,需要获取锁d,才能完成业务逻辑。
而刚好此时线程b拥有锁d,需要获取锁c,也能完成业务逻辑。
线程a等待线程b释放锁,而线程b等待线程a释放锁,两个线程都持有对方需要的锁,无法主动释放,就会出现死锁问题。
死锁会导致CPU使用率飙升。

7 正则匹配
其实这里导致 CPU 使用率高的关键原因就是:Java 正则表达式使用的引擎实现是NFA自动机,这种正则表达式引擎在进行字符匹配时会发生回溯。

8 耗时计算
因为实时计算需要消耗cpu资源,如果一直计算,就会一直消耗cpu资源。

posted on   oktokeep  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示