图文地址:https://mp.weixin.qq.com/s?__biz=Mzg3NjEzODQ4NQ==&mid=2247483690&idx=1&sn=7c926f40010fa6c927e34ae872a050ed&chksm=cf379bb0f84012a67c3fd36660695525b5254eb0720ff609f4bceb93d33fdf8c16847f60c9ae&mpshare=1&scene=23&srcid=0331altU001YYDNZzAMY4uXO#rd

一.前言

上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演!

二.现象

监控告警,某机器的CPU飙升到100%

三.分析

  第一步,通过以下指令找到CPU高的进程号

    top -p `pgrep -d , java`

  第二步,通过以下指令找到CPU高的线程号

    top -Hp 进程号

  第三步,通过以下指令把线程号转换成16进制

    printf"%x\n" 线程号

  第四步,通过以下指令打印线程的stacktrace

    jstack 进程号 |grep 16进制线程号 -A 50

  第五步,分析stacktrace的信息,定位哪个地方导致的CPU占用率高

  第六步,可以定位到了FundClearRecordCtrl这个类里面的存在HashMap使用不当,导致死循环引发的CPU飙升

    1、正常情况下

    2、线程不安全,多线程并发的情况下,假如两个线程T1和T2,会造成e1.next = e2,而e2.next = e1,即形成环形,会导致死锁,然后现象就是CPU飙升

排查方向基本明朗,接下来让我们回到具体问题中,来解决问题!

四.解决

HashMap线程不安全,对于久经沙场的小伙伴们来说,这种认知还是有的,但是为啥还会入坑呢?

这个类没有明显的把HashMap作为公共变量,应该不存在多线程去操作HashMap的情况呀?

不能怪小伙伴,这个bug还真不好找,隐藏得有点深!

小伙伴也是无意中踩了坑,为什么说这个BUG隐藏得深呢?

由于DB资源紧缺,为了减少DB的直接操作,在DBUtil加了缓存,小伙伴在调用DBUtil的情况下,拿到的缓存的HashMap,此时该HashMap就是一个公共资源了,对于线程不安全的HashMap在多线程并发的情况下,理所当然的就进入了死循环!

总结

1、遇到CPU飙升,第一时间不好重启,先找到CPU高的类,确定好排查方向;

2、HashMap线程不安全,多线程并发场景下建议使用ConcurrentHashMap;

PS:上面的HashMap线程不安全讲得有点粗略,下次单独跟大家讲一下HashMap、HashTable和ConcurrentHashMap

记一次CPU飙升BUG的更多相关文章

  1. 【原创】记一次MySQL大表高并发写入引发CPU飙升的排障过程

    目录 一.故障现象... 1 二.初步分析... 2 三.排障过程... 2 1.排查是否QPS或insert并发请求上升导致问题发生... 2 2.排查是否锁资源等待或block导致了insert变 ...

  2. 记一次Linux server偶发CPU飙升问题的跟进与解决

    背景 进入6月后,随着一个主要功能版本api的上线,服务端的QPS翻了一倍,平时服务器的CPU使用稳定在30%上下,高峰期则在60%上下,但是偶尔会有单台机器出现持续数分钟突然飙到90%以上,导致大量 ...

  3. 线上CPU飙升100%问题排查,一篇足矣

    一.引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高. 二.问题复现 线上系统突然 ...

  4. 线上CPU飙升100%问题排查

    本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考 ...

  5. 记一次线上bug排查-quartz线程调度相关

    记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...

  6. .dhpcd导致cpu飙升问题

    因公司有业务服务器在阿里云上面,阿里云后台报警说,“有恶意程序在挖矿”,引起了高度重视,于是我登陆服务器进行排查. 登陆云服务器:系统centos7.5 第一步使用top查看资源情况. top 可以清 ...

  7. pt-kill--- MySQL数据库CPU飙升紧急处理方法

    MySQL数据库CPU飙升紧急处理方法 [日期:2014-01-22] 来源:Linux社区  作者:hcymysql [字体:大 中 小]       运行平稳的数据库,如果遇到CPU狂飙,到80% ...

  8. 面试连环炮系列(八):服务器CPU飙升100%怎么排查

    服务器CPU飙升100%怎么排查 执行"top"命令,查看当前进程CPU占用的实时情况,PID列是进程号,确定是哪个应用程序的问题. 如果是Java应用导致的,怎么定位故障原因 执 ...

  9. MySQL数据库CPU飙升紧急处理方法

    MySQL数据库CPU飙升紧急处理方法 运行平稳的数据库,如果遇到CPU狂飙,到80%左右,那一定是开发写的烂SQL导致的,DBA首先要保证的是,数据库别跑挂了,所以我们要把那些运行慢的SQL杀死并记 ...

随机推荐

  1. 《前端之路》之三 数组的属性 && 操作方法(上)

    目录 03:数组的属性 && 操作方法(上) 03:数组的属性 && 操作方法(上) 一.Array property 数组的属性 1.constructor 返回对创 ...

  2. Sentinel 流程分析

    最近公司开始做新的项目.新项目准备用点新的技术.之前我们采用的是spring cloud的那一套.之前几个月看到阿里开始拥抱springcloud,推出好几个组件无缝兼容现有springcloud.我 ...

  3. 接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求

    在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 ...

  4. SpringBoot简单打包部署(附工程)

    前言 本文主要介绍SpringBoot的一些打包事项和项目部署以及在其中遇到一些问题的解决方案. SpringBoot打包 在SpringBoot打包这块,我们就用之前的一个web项目来进行打包. 首 ...

  5. [深度应用]·实战掌握PyTorch图片分类简明教程

    [深度应用]·实战掌握PyTorch图片分类简明教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com ...

  6. 服务器linux centos 7.4 搭建ftp服务器

    此操作是在腾讯云服务器linux centos 7.4 完成搭建ftp服务器 vsftpd 的: 安装 vsftpd $ yum install vsftpd -y 启动 $ service vsft ...

  7. 80后程序员降薪6K,预感中年危机来袭,准备跳槽却碰壁

    一提及程序员,很多人想到的都是“工资高”“技术好”诸如此类的,可见程序员是个非常赚钱的职业,所以每年都会有很多毕业生来选择这个行业. 但是社会是公平的,不要只看程序员表面上的光鲜亮丽,其背后也有很多的 ...

  8. 编程心法 之什么是MVP What is MVP development?

    Minimal Value product(feather), 比如说,如果是一个新的Photoshop,那么增加图片亮度就是一个MVP. 想要看到更多玮哥的学习笔记.考试复习资料.面试准备资料?想要 ...

  9. nginx系列12:一致性哈希算法

    前面一节的hash算法存在一个问题,当上游的应用服务器因某一台down掉导致服务器数量发生变化时,会导致大量的请求路由策略失效,一致性哈希算法可以缓解这个问题. 一致性哈希算法 1,hash算法存在的 ...

  10. vue实例化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...