0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CPU占用率过高导致系统登录不上问题分析

jf_ro2CN3Fa 来源:稀土掘金技术社区 2023-09-06 15:40 次阅读

又是一个百无聊赖的早晨,我在快乐地摸鱼,工作群响了:离线系统登录不上了。我第一反应是不科学啊,系统已经很久改动过了...赶紧上生产环境看看,CPU高达1200%。接着又是熟练地敲出那几行排查CPU过高的命令

top-H-ppid查看java占用率最高的几条线程
jstackpid>xxx.txt打印线程快照
jmap-heappid查看堆内存情况
9379f48a-4c55-11ee-a25d-92fbcf53809c.jpgtop命令 939adcc2-4c55-11ee-a25d-92fbcf53809c.jpgjstack命令 93b076e0-4c55-11ee-a25d-92fbcf53809c.jpgjmap命令

看这玩意啥都看不出来,感觉是系统对象没有释放,在疯狂GC,但是因为FULL GC的时候已经STW了,所以无法查看到底是哪个线程出了问题。然后过了10分钟系统突然又好了....堵塞的操作已经完成,gc能正常回收了。

然后过了两分钟又卡死了,我先重启了系统,后面再分析分析。

等系统没什么人用的时候,我再试着重现一下问题,打开系统一顿乱点,结果是点开某个功能的详情时系统卡住了,CPU又飚上去了,喜闻乐见~问题定位到了,再实锤一下之前是不是这个问题,我看了一下localhost_access_log日志发现,确实是这个接口卡了一千多秒。

93b76ce8-4c55-11ee-a25d-92fbcf53809c.jpgnginx日志

因为离线没什么人使用,所以问题过了很久再暴露出来。看了一下代码,主要是同事业务逻辑问题,有个参数没传进去,导致 sql 走了全表扫描,数据很多,要查很久,查到了几百万的数据,gc 也无法回收。

还好内存够大,要不然早就 OOM 了。

复盘

一开始我以为是某个接口调了很多次并发太高导致的,没想到点一下详情系统就挂了。。我们可以看到CPU在GC回收的时候STW,是没有线程能占用到CPU的,所以top -H -p pid 只能看到CPU全被GC线程占用了。如果是某个接口并发太高导致的,我们可以看jstack线程快照,里面是会有这个接口在执行的记录。

还有一个问题就是说系统GC卡了10-20分钟,却没有报OOM,还是一直在堵塞状态,后面还正常了一小会,这个是需要看堆内存的情况...

因为比较难排查所以只是通过现象知道GC还是可以回收一点点垃圾的

总结

1、CPU100%的时候可以打印线程快照jstack pid,查看是哪个线程占用了CPU,一般都是某个业务线程阻塞无法进行GC回收导致。

2、可以查看localhost_access_log查看系统接口用时,一般用时很久的都是有问题的接口。

3、同事的业务代码参数没有传,导致全表扫描直接卡死系统。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10862

    浏览量

    211727
  • 内存
    +关注

    关注

    8

    文章

    3024

    浏览量

    74039
  • 命令
    +关注

    关注

    5

    文章

    684

    浏览量

    22021
  • 代码
    +关注

    关注

    30

    文章

    4787

    浏览量

    68591
  • nginx
    +关注

    关注

    0

    文章

    149

    浏览量

    12173

原文标题:点一下详情系统挂了,CPU 100%

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    编程之美 指挥CPU占用率

    很经典,自己可以控制CPU占用率曲线
    发表于 05-02 20:45

    proteus仿真CPU占用率过高

    proteus中哪些结构会导致仿真时CPU占用率过高,如何避免?
    发表于 09-09 23:29

    请问为什么am3354 刷新lcd时cpu占用率很高?

    %3.接lcd跟接上的cpu占用率一样,都很高4.fb驱动文件使用的是da8xx-fb.c请问这种现象是否为fb驱动的问题,该从哪些方面进行排查?谢谢
    发表于 06-20 05:02

    Linux的CPU和内存占用率查看

    我们经常需要查看CPU和内存占用率,否则一旦存在情况很快就会有IDC(或客户)找上门,Linux查看资源使用情况有多种命令可以参考,CPU、内存、IO、NETWORK等资源使用情况都
    发表于 07-24 06:52

    基于IMX6查看Linux下的CPU和内存的占用率

    ,0.0 si,0.0 st 要获取包含百分比符号的 CPU 占用率:#top -b -n1 | grep ^%Cpu | awk '{cpu
    发表于 10-30 10:18

    STM32F407的中断CPU占用率怎么计算?

    如题!另外,假设中断函数内的语句一样,定时器的中断和DMA的中断CPU占用率一样么?
    发表于 06-02 11:15

    如何让CPU占用率达到100%?

    CPU占用率达到100%的方法
    发表于 11-06 06:52

    rtthread有每个线程的CPU占用率统计吗?

    rtthread有每个线程的CPU占用率统计吗,监控每个线程的占用时间,根据这个调整线程优先级。
    发表于 04-14 09:48

    CPU占用率100%的故障解决

      相信很多朋友都遇到过CPU占用率100%的情况,那会导致系统慢如蜗牛。半小时前,笔者正在玩游戏,电脑突然行动迟缓,打开任务管理器,发现CPU
    发表于 08-29 10:24 988次阅读

    服务器CPU占用率高的定位分析

    通过性能监控发现上线服务器cpu某核占用率已经达到了100%,而且是由我们的某个核心服务导致的。
    发表于 03-17 16:35 946次阅读

    虚拟机:查看linux线程的CPU占用率的方法

    虚拟机:查看linux线程的CPU占用率的方法
    的头像 发表于 06-22 10:06 4131次阅读
    虚拟机:查看linux线程的<b class='flag-5'>CPU</b><b class='flag-5'>占用率</b>的方法

    Chromebook安装更新Chrome OS或将导致CPU占用率达到100%和发热问题

    Chromebook 在安装最新的 Chrome OS 更新之后,会导致 Google Play Store 服务的 CPU 占用率达到 100%,并让设备出现发热和性能问题。在升级到
    的头像 发表于 09-28 14:23 2249次阅读
    Chromebook安装更新Chrome OS或将<b class='flag-5'>导致</b><b class='flag-5'>CPU</b><b class='flag-5'>占用率</b>达到100%和发热问题

    stm32运用freertos库函数测试各个线程任务信息和cpu占用率

    通过对工程中各个线程任务的分析,以便进行任务代码的优化或者更换主处理芯片。仅为记录,欢迎大佬指出错误。如有帮助,十分荣幸。我的mcu是stm32f405,frertos,标准库函数。cpu占用率
    发表于 12-14 18:58 0次下载
    stm32运用freertos库函数测试各个线程任务信息和<b class='flag-5'>cpu</b><b class='flag-5'>占用率</b>

    java中cpu占用过高如何分析

    Java中CPU占用过高是一种常见的问题,需要通过多种方法进行分析和解决。本文将详细介绍Java中CPU占用过高的原因以及如何进行
    的头像 发表于 12-05 11:15 9327次阅读

    服务器cpu占用率高怎么解决

    长时间运行的计算任务 应用程序存在内存泄漏,导致CPU占用率上升 系统问题 操作系统配置不当,导致
    的头像 发表于 10-10 15:14 919次阅读