Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >因死循环导致CPU飙升到100%的问题排查记录

因死循环导致CPU飙升到100%的问题排查记录

作者头像
翎野君
发布于 2023-05-12 12:26:05
发布于 2023-05-12 12:26:05
83000
代码可运行
举报
文章被收录于专栏:翎野君翎野君
运行总次数:0
代码可运行

背景

突然收到运维告警邮件,线上的一台负责处理定时任务的服务器CPU飙升到了100%,立马放下手头工作开始了紧张的排查工作。

之前也写过一篇文章JVM调优之Java进程消耗CPU过高

过程

1、确定Java应用进程编号

使用 jps 或 ps -ef|grep java 命令确定想要分析的应用的进程编号

2、查看Java应用中线程CPU占比

使用top -p 109023 -H 命令查看指定进程下的线程cpu占用比例,分析是具体哪个线程占用率过高,其中 109023 就是通过第一步确定下来的进程编号

从top命令列出来的线程信息中找出对应占用cpu很高的线程,并将线程号转化为十六进制的形式

printf "%x\n" 201106 得到对应的十六进制31192

3、查看线程信息

从中选择占比较高的线程的编号(PID),并将该PID转换为16进制。通过jstack 109023 |grep 31192

通过该命令可以分析出线程的具体信息,再通过相应的解决方法来解决cpu占用过高的问题。

结果

最终排查发现是之前有个人在定时任务这里埋了一个坑,导致了死循环而引发的问题,代码大致如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
        int beginId = 1;
        // 1.查出来所有需要处理的流水信息
        List<Phone> needHandlePhoneList = listNeedHandlePhone(beginId);
        if (needHandlePhoneList.size() == 0){
            return;
        }
        // 2.开始处理
        while (needHandlePhoneList.size() > 0){
            // 执行逻辑...
            // bug:总数数据库中只有3条待处理记录,第一次查出3条,最后一条的id是3,那么此处的beginId便为3
            beginId = needHandlePhoneList.get(needHandlePhoneList.size()-1).getId();
            // bug:上面查出来的beginId是3,在按照>=3去是数据库中查询,还是会查到一条记录,如此needHandlePhoneList始终不为空,产生死循环
            needHandlePhoneList = listNeedHandlePhone(beginId);
        }

    }

    private static List<Phone> listNeedHandlePhone(int beginId) {
        /**
         * select * from phone where id >= #{beginId} order by id limit 100
         *
         * >= 存在问题,与外部逻辑配合会产生死循环,需改成>
         */
        return initPhoneList();
    }

原文链接:https://cloud.tencent.com/developer/article/2285727

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
因Full GC导致CPU飙升到100%问题排查记录
提供了一个商品信息查询接口,此接口中会从Redis缓存中读取一个大对象列表出来,然后再根据传入的参数,对大对象列表进行过滤,进而得到最终的返回结果。
翎野君
2023/05/12
1.3K0
代码逻辑死循环导致线上CPU飙升问题排查
今天下午出现告警提示线上环境机器的CPU突增到100%,持续约两分钟又回落到正常水平。
翎野君
2024/03/05
2020
线上CPU飙升100%问题排查,一篇足矣
对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。
Java_老男孩
2019/12/02
3.1K0
CPU 100%问题排查总结
【1】定位高负载进程 pid:登录进服务器使用 top 或 top -c命令[ps -ef | grep xxx 命令]查看当前 CPU消耗过高的进程,从而得到进程id。观察各个进程资源使用情况,可以看出进程id为18571的进程,有着较高的CPU占比。按P(大写)可以倒序查看占CPU占用率。
Java架构师必看
2021/05/14
2K0
CPU 100%问题排查总结
Linux系统cpu飙升到100%排查方案
一共1个占用cpu的线程id 7556 ,需要将线程id从十进制转为十六进制,因为java线程栈文件中的线程id是十六进制。十进制 转十六进制的命令是:
正在走向自律
2024/12/17
3490
Linux系统cpu飙升到100%排查方案
面试官必问:CPU 100%该如何处理?
CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。
程序员江小北
2024/06/29
3020
面试官必问:CPU 100%该如何处理?
如何定位当生产环境CPU飙升的时候的问题
在当今的信息化时代,计算机系统在各行各业都发挥着重要的作用。然而,当生产环境中的CPU飙升时,系统性能会受到影响,甚至导致整个系统瘫痪。这不仅会对企业造成经济损失,还会对用户体验造成严重影响。因此,如何定位并解决生产环境中CPU飙升的问题,已成为众多企业和开发人员亟待解决的问题之一。
绿毛龟
2024/01/19
4230
如何定位当生产环境CPU飙升的时候的问题
CPU 飙升排查
代码很简单 接口1“/hello” 返回“hello World”,接口2“/run” 进入死循环,这样就保证了访问接口2cpu升高。
AlphaHinex
2024/04/08
1320
CPU 飙升排查
Java服务CPU100%异常排查实践总结
最近看牛客网发现了CPU 100% 怎么办这个问题,这个问题的重点是定位和解决,会用到Linux和java的的很多命令,所以写篇博客记录和总结一下。
CBeann
2023/12/25
3030
Java服务CPU100%异常排查实践总结
【Java】服务CPU占用率100%,教你用jstack排查定位
jstack 就像是给你的Java 程序做的一次“体检”,特别是检查程序里的“线程”是否健康。
JavaDog程序狗
2024/09/24
6230
【Java】服务CPU占用率100%,教你用jstack排查定位
Linux CPU负载过高问题排查
通过观察load average,以及负载评判标准(8核),可以确认服务器存在负载较高的情况;
用户5760343
2019/10/30
6.7K0
Linux CPU负载过高问题排查
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。
Java3y
2023/08/22
5120
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
  后文会从 Windows、Linux 两个系统来做示例展示,有人会有疑问了:为什么要说 Windows 版的 ? 目前市面上还是有很多 Windows 服务器的,应用于传统行业、政府结构、医疗行业 等等;两个系统下的情况都演示下,有备无患
青石路
2020/10/09
2.8K0
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。
博文视点Broadview
2023/08/09
2590
Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增
如何排查CPU占用100%
线上后台报警CPU占用100%,CPU占用过高,本文介绍一下如何排查CPU占用过高原因。
用户10384376
2023/02/26
2K0
如何排查CPU占用100%
关于JVM CPU资源占用过高的问题排查
一、背景:     先执行一个java程序里面开了两个线程分别都在while循环做打印操作。 # java -cp ./test-threads.jar com.spiro.Main 二、现象
囚兔
2018/02/08
1.5K0
关于JVM CPU资源占用过高的问题排查
敖丙我把线上CPU打到100%,三歪吓尿了
你们没发现我最近的原创原创少了很多嘛,一是最近花了很多时间做视频,本来我写文章就是利用周末的两天时间,但是现在基本上两天都要拍摄剪辑了,尽管请了小伙伴做字幕,还是得耗费大量时间在拍摄和剪辑上。
敖丙
2020/04/07
6640
坏代码导致的性能问题大赏:CPU占用飙到了900%!
读过《重构 - 改善既有代码的设计》一书的同学们应该都很了解“代码的坏味道”。当然确定什么是代码“坏味道”是主观的,它会随语言、开发人员和开发方法的不同而不同。在工作当中,很多时候都是在维护之前的项目和在此基础上增加一些新功能,为了能让项目代码易于理解和维护,要时刻注意代码中的“坏味道”,当发现代码如果有坏味道了,要及时去重构它使其变成优秀的整洁的代码。今天我们要聊的是“坏味道的代码”给系统性能带来的影响,笔者会给大家展示几个案例,希望能对大家有所启发和帮助。
玖柒的小窝
2021/10/31
1.3K0
坏代码导致的性能问题大赏:CPU占用飙到了900%!
CRUDBoy成长计划(6)— CPU100%优秀笔记汇总
根据 top 命令,发现测试环境 PID 为 5989 的 Java 进程占用 CPU 高达 100%, 疑似故障。但是,怎么定位到具体线程或者代码呢?
鹿老师的Java笔记
2022/01/20
3000
CRUDBoy成长计划(6)— CPU100%优秀笔记汇总
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。
芋道源码
2019/06/21
1.1K0
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
相关推荐
因Full GC导致CPU飙升到100%问题排查记录
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验