CPU飙升100%怎么办?字节跳动面试官告诉你答案!
小北说在前面
CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。
这个问题可以很简单,也可以相当复杂。
有时候,只是一个死循环在作祟。
有时候,是死锁导致的。
有时候,代码中有不必要的同步块。
有时候,是大量计算密集型任务在运行。
有时候,是线程数过多引起的。
有时候,是频繁的上下文切换。
有时候,是内存不足的问题。
有时候,是频繁的垃圾回收。
有时候,是内存泄漏导致的。
等等。
导致CPU占用率飙升的问题多种多样,不同系统中的不同场景,其原因可能各不相同。
在这里,小北将对这些问题进行系统化、体系化的梳理,帮助大家在实际工作和面试过程中能够清晰、有条理地分析和解决CPU占用率过高的问题
插播一条:真的免费,如果你近期准备面试跳槽,建议在cxykk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题。
一、cpu占用很高的3大类型,9大场景
1.1业务类问题
1.1.1 死循环
死循环是指程序在特定条件下进入了一个无限循环,无法跳出,导致CPU资源被完全占用。
例如:我们有一段代码用来检查文件的更新状态,但由于逻辑错误,条件永远无法满足,结果程序进入了死循环。
while (true) {if (file.isUpdated()) {break;}
}
1.1.2 死锁
死锁是指两个或多个线程互相等待对方释放资源,导致所有线程都无法继续执行,CPU资源被消耗殆尽。
发生死锁后,就会存在忙等待或自旋锁等编程问题,从而导致 繁忙等待问题,从而导致 CPU 100%
1.1.3 不必要的代码块
一些冗余、不必要的代码块在运行时占用了大量的CPU资源。
例如,不需要的地方使用synchronized块。
public synchronized void unnecessarySync() {// 执行一些不需要同步的操作
}
在不需要的地方使用synchronized块,会导致线程竞争和上下文切换
1.2、并发类问题
1.2.1 大量计算密集型的任务
大量计算密集型任务在同一时间运行,会导致CPU资源被完全占用。
例如:在数据分析或科学计算中,多个计算密集型任务同时运行
1.2.2 大量并发线程
统中存在大量并发线程,线程切换频繁,导致CPU资源被大量消耗在上下文切换上
例如:Web服务器同时处理大量请求,每个请求都创建一个新线程
解决方案:使用线程池来限制并发线程数量
1.2.3 大量的上下文切换
当系统中存在大量线程时,CPU在不同线程间频繁切换,导致性能下降
例如:一个程序中开启了数百个线程,每个线程都在不断进行I/O操作
for (int i = 0; i < 1000; i++) {new Thread(new IOHandler()).start();
}
线程是很宝贵的资源,开启线程一定要合理的控制线程数量
3、内存类问题
1.3.1 内存不足
当系统内存不足时,就会将磁盘存储作为虚拟内存使用,而虚拟内存的运行速度要慢得多。
例如:直接一次性加载一个非常大的文件到内存中,导致内存不足
byte[] largeData = Files.readAllBytes(Paths.get("largeFile.txt"));
这种过度的分页和交换会导致 CPU 占用率居高不下,因为处理器需要花费更多时间来管理内存访问,而不是高效地执行进程。
解决方案:优化内存使用,采用流式处理避免一次性加载大文件
try (BufferedReader reader = Files.newBufferedReader(Paths.get("largeFile.txt"))) {String line;while ((line = reader.readLine()) != null) {// 处理每一行数据}
}
1.3.2 频繁GC
频繁的垃圾回收(GC)操作会占用大量CPU资源,导致性能下降。
例如:程序中频繁创建和销毁对象,导致GC频繁触发
for (int i = 0; i < 1000000; i++) {String temp = new String("temp" + i);
}
解决方案:优化对象创建和销毁,减少临时对象的生成。
1.3.4 内存泄漏
内存泄漏导致可用内存逐渐减少,最终触发频繁的GC操作,占用大量CPU资源
例如:某个数据结构中不断添加对象,却从未删除,导致内存泄漏
List<Object> list = new ArrayList<>();
while (true) {list.add(new Object());
}
解决方案:定期清理不再使用的对象,使用合适的数据结构
插播一条:真的免费,如果你近期准备面试跳槽,建议在cxykk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题。
这么多会导致CPU飙升100%的原因,那么该如何解决呢?
有没有一个标准的套路,可以帮助我快速定位呢?
答案是;当然有
二、CPU 飙升100%的解决思路和方法论
2.1 使用jstack 解决CPU 100%问题
使用jstack 解决 CPU 100%问题,在方法论上要用到的两个核心命令
- top 命令查看TOP N线程,
- jstack命令查看堆栈信息
2.1.1 确定Java进程ID
首先,需要找到CPU占用高的Java进程的PID(进程ID)。可以使用 top 或 ps 命令来找到该进程。
top -H -p <PID>
2.1.2 找到占用CPU高的线程ID
在 top 的输出中,按 P 键可以按CPU使用率排序,找到使用CPU最多的线程。
记下这些线程的ID(nid),这些ID是十进制的。
2.1.3 将线程ID转换为十六进制
jstack 输出的线程ID是十六进制的,因此需要将找到的高CPU使用率的线程ID转换为十六进制。可以使用 printf 命令:
printf "%x\n" <thread_id>
2.1.3 使用 jstack 生成线程快照
使用 jstack 命令生成Java进程的线程快照:
jstack -l <PID> > thread_dump.txt
2.1.4 分析线程快照
在生成的 thread_dump.txt 文件中,查找转换后的十六进制线程ID。可以使用 grep 命令:
grep "0x<hex_thread_id>" thread_dump.txt -A 20
这将显示包含该线程ID的线程栈信息。分析这些线程栈,找到可能导致CPU高占用的代码
2.2 使用阿里开源Arthas性能监控工具
Arthas 是一款强大的 Java 诊断工具,能够帮助开发人员快速定位和解决 CPU 100% 的问题
使用arthas解决CPU 100%问题,在方法论上要用到两个核心命令:
- dashboard 命令查看TOP N线程,
- thread 命令查看堆栈信息
2.2.1. 安装和启动 Arthas
安装 Arthas
通过 curl 命令下载并安装 Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
注意:在生产环境中,我们一般是选择其中一台机器开启Arthas监控,因为使用 Arthas 对系统性能会有一定影响
2.2.2 启动 Arthas
启动目标 Java 应用程序,然后在终端中运行:
java -jar arthas-boot.jar
Arthas 会显示当前运行的 Java 进程列表,选择要诊断的 Java 进程:例如输入1显示如下
2.2.3 使用 dashboard 命令查看系统概况
连接到目标进程后,使用 dashboard 命令查看系统的整体性能概况,包括 CPU 使用情况
dashboard
2.2.4 使用 thread 命令定位高 CPU 线程
查看线程列表
使用 thread 命令查看所有线程的信息,并找出 CPU 使用率高的线程
thread -n 3
这个命令会显示 CPU 使用率最高的 3 个线程,输出中会包含每个线程的 ID 和名称
2.2.5 查看具体线程的堆栈信息
假设你发现线程 ID 为 8 的线程 CPU 使用率很高,可以进一步查看该线程的堆栈信息:
thread 8
该命令会显示线程 8 的详细堆栈信息,帮助你定位到具体的代码位置
插播一条:真的免费,如果你近期准备面试跳槽,建议在cxykk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题。
三、总结
工具的选择建议使用arthas,它还有很多的功能在实际中很有用
感兴趣的同学可以自行前往官网学习了解:https://arthas.aliyun.com/doc/
需要注意的是:大家在面试的时候如果遇到cpu被打满该如何排查这样的问题,千万不要上来就回答使用arthas来定位问题。
在生产环境中出现问题时,我们第一时间要做的是解决问题,所以回答要符合实际场景,不然面试官一听,就知道你是背的八股文。
那么该如何回答呢?
生产中如果出现 CPU 飙升100% 的情况
- 先确定前一天或者最近是否有新版本发布或者依赖域的服务有新版本发布,有的话第一时间回滚。
- 如果最近或很长一段时间都没有新版本发布,那就先申请紧急扩容,增加机器
最后才是通过文本的这一套套路排查具体的原因分析和解决方案
最后说一句(求关注,求赞,别白嫖我)
最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软
本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!
真的免费,如果你近期准备面试跳槽,建议在cxykk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/839780e2f99e35e57a84bc221cd7e66a.png)
CPU飙升100%怎么办?字节跳动面试官告诉你答案!
小北说在前面 CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。 这个问题可以很简单,也可以相当复杂。 有时候,只是一个死循环在作祟。 有时候,是死锁导致的。 有时候,代码中有…...
![](https://img-blog.csdnimg.cn/img_convert/b76ecaa68e2d908ec2330c18c0131a7f.png)
物理层(二)
2.2 传输介质 2.2.1 双绞线、同轴电缆、光纤和无线传输介质 传输介质也称传输媒体,是数据传输系统中发送器和接收器之间的物理通路。传输介质可分为:①导向传输介质,指铜线或光纤等,电磁波被导向为沿着固体介质传播:②)非导向传输介质&…...
![](https://www.ngui.cc/images/no-images.jpg)
C#——文件读取IO操作File类详情
文件读取操作 IO类 就是对应文件的操作的类I/O类 包含各种不同的类 用于执行各种文件操作,创建文件删除文件读写文件 常用的类: File处理文件操作的类 FilleStream用于文件当中任何位置的读写 File类 1.文件创建 File.Create() 在指定路径下创建…...
![](https://img-blog.csdnimg.cn/direct/a1df30575ff748e4998992591135f6c4.png)
昨天gitee网站访问不了,开始以为电脑哪里有问题了
昨天gitee网站下午访问不了,开始以为是什么毛病。 结果同样的网络,手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的,但就是访问www.gitee.com也是不行,后来用阿里云的服务器curl访问是下面情况&…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解适配器模式:Java实现与框架应用
适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。在本篇博客中,我们将详细介绍适配器模式,并演示如何在Java中实现它。最后࿰…...
![](https://img-blog.csdnimg.cn/direct/a2f01bd219ee4813bb6d09cb5785080b.png)
跌倒识别:守护公共安全的AI技术应用场景-免费API调用
随着科技的不断进步,人工智能在各个领域的应用日益广泛,其中在公共安全领域,智能跌倒识别系统正逐渐成为守护人们安全的重要工具。本文将分享智能跌倒识别系统在不同场景下的应用及其重要性。 产品在线体验地址-API调用或本地化部署 AI算法模…...
![](https://img-blog.csdnimg.cn/direct/10b222c450634298a9656091c9c1be8f.png)
算法:渐进记号的含义及时间复杂度计算
渐进记号及时间复杂度计算 渐近符号渐近记号 Ω \Omega Ω渐进记号 Θ \Theta Θ渐进记号小 ο \omicron ο渐进记号小 ω \omega ω渐进记号大 O \Omicron O常见的时间复杂度关系 时间复杂度计算:递归方程代入法迭代法套用公式法 渐近符号 渐近记号 Ω \Omega Ω …...
![](https://img-blog.csdnimg.cn/direct/2cbec1044d82444cb132111be303d8bf.png)
idea导入文件里面的子模块maven未识别处理解决办法
1、File → Project Structure → 点击“Modules” → 点击“” → “Import Model” 2、可以看到很多子模块,选择子模块下的 pom.xml 文件导入一个一个点累死了,父目录下也没有pom文件 解决办法:找到子模块中有一个pom.xml文件,…...
![](https://www.ngui.cc/images/no-images.jpg)
IOS Swift 从入门到精通:协议和扩展
文章目录 协议协议继承扩展协议扩展面向协议的编程总结: 今天你将学习一些真正的 Swifty 功能:协议和面向协议的编程(POP)。 POP 摒弃了庞大而复杂的继承层次结构,代之以更小、更简单、可以组合在一起的协议。这确实应…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue插件开发:Vue.js的插件架构允许开发者扩展Vue的核心功能,我们可以探讨如何开发一个Vue插件并与社区分享
了解Vue插件 Vue插件的概念: Vue插件用于为Vue.js添加全局级别的功能。它提供了一种开箱即用的机制来应用全局性的功能扩展。这些插件通常用来将全局方法或属性,组件选项,Vue实例的方法,或者注入一些组件选项比如mixins和自定义方法添加至Vue.js。 Vue插件的使用场景:…...
![](https://www.ngui.cc/images/no-images.jpg)
学习面向对象前--Java基础练习题
前言 写给所有一起努力学习Java的朋友们,敲代码本身其实是我们梳理逻辑的一个过程。我们在学习Java代码的过程中,除了需要学习Java的一些基本操作及使用,更重要的是我们需要培养好的逻辑思维。逻辑梳理好之后,我们编写代码实现需要…...
![](https://img-blog.csdnimg.cn/direct/2ed5728c392043f59035d896db6598ff.png)
用Python实现抖音新作品监控助手,实时获取博主动态
声明: 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。包含关注,点赞等 该项目的主要功能是通过Python代码&…...
![](https://www.ngui.cc/images/no-images.jpg)
图像分隔和深度成像技术为什么受市场欢迎-数字孪生技术和物联网智能汽车技术的大爆发?分析一下图像技术的前生后世
图像分隔和深度成像是计算机视觉和图像处理领域的两项重要技术,它们各自有不同的技术基础和要点。 图像分隔技术基础: 机器学习和模式识别: 图像分隔通常依赖于机器学习算法,如支持向量机(SVM)、随机森林…...
![](https://img-blog.csdnimg.cn/direct/d26f7008582240bd9d5d460bac1c23c1.png)
Redis 内存策略
一、Redis 内存回收 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置 Redis 的最大内存: # 格式: # maxmemory <byt…...
![](https://www.ngui.cc/images/no-images.jpg)
Java小实验————斗地主
早期使用的JavaSE用到的技术栈有:Map集合,数组,set集合,只是简单实现了斗地主的模拟阶段,感兴趣的小伙伴可以调试增加功能 代码如下: import java.util.*;public class Poker {public static void main(String[] arg…...
![](https://www.ngui.cc/images/no-images.jpg)
【Oracle】Linux 卸载重装 oracle 教程(如何清理干净残留)系统 CentOS7.6
总览 1.停止监听 2.删除 Oracle 数据库实例 3.删除 Oracle 相关服务 4.删除 Oracle 服务脚本 5.清理 Oracle 软件和配置文件 6.强制卸载 Oracle 软件包 一、开始干活(所有操作使用 root 权限,在 root 用户下执行) 1.停止监听 lsnrctl sto…...
![](https://img-blog.csdnimg.cn/direct/f37af2498c7e40f686671ed397c3b1a7.png)
web中间件漏洞-Jenkins漏洞-弱口令、反弹shell
web中间件漏洞-Jenkins漏洞-弱口令、反弹shell Jenkins弱口令 默认用户一般为jenkins/jenkins 使用admin/admin123登陆成功 Jenkins反弹shell 格式为 println"命令".execute().text 在/tmp目录中生成shell.sh文件,并向其中写入反弹shell的语句 new…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux开发讲课9--- Linux的IPC机制-内存映射(Memory Mapping)
Linux的IPC(Inter-Process Communication,进程间通信)机制是多个进程之间相互沟通的方法,它允许不同进程之间传播或交换信息。Linux支持多种IPC方式,包括但不限于: 管道(Pipe)&#…...
![](https://img-blog.csdnimg.cn/img_convert/16840f3d1367402b4db31211931b9476.png)
Java赋值运算符
Java赋值运算符分为以下: 符号 作用 说明 赋值 int a 10,把10赋值给变量a 加后赋值 ab,将ab的值赋值给变量a - 减后赋值 a-b,将a-b的值赋值给变量a* 乘后赋值 a*b,将a*b的值赋值给变量a / 除后赋值 a/b,将a/b的值赋值给变量a % 取余赋值 a%b,将a%b的值赋值给变量…...
![](https://img-blog.csdnimg.cn/direct/b73feaef623549079e11ea790dd972f6.png)
Qt做群控系统
群控系统顾名思义,一台设备控制多台机器。首先我们来创造下界面。我们通过QT UI设计界面。设计界面如下: 登录界面: 登录界面分为两种角色,一种是管理员,另一种是超级管理员。两种用户的主界面是不同的。通过选中记住…...
![](https://www.ngui.cc/images/no-images.jpg)
【专业英语 复习】第10章 Information System
1. 单选题 (1分) An example of this type of report would be a sales report that shows that certain items are selling significantly above or below forecasts. () A. Inventory B. Demand C. Periodic D. Exception 正确答案: D 这种类型的报…...
![](https://img-blog.csdnimg.cn/direct/d412763c658a4c079fa7f03a5decbd8d.png)
09-axios在Vue中的导入与配置
09-axios 前言首先简单了解什么是Axios?以上完成后就可以使用了 前言 我们接着上一篇文章 08-路由地址的数据获取 来讲。 下一篇文章 10-vuex在Vue中的导入与配置 首先简单了解什么是Axios? Axios是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端…...
![](https://img-blog.csdnimg.cn/direct/c0049b8c9b2a46cab9fde93863235d1d.png)
odoo17 小变更4
odoo17 小变更4 1、代码中去除了访问私人地址权限,但翻译中均还有,怪不 model:res.groups,name:base.group_private_addresses msgid "Access to Private Addresses" msgstr "" 代码也查看了,的确没有了此权限组 --><record model="res.g…...
![](https://www.ngui.cc/images/no-images.jpg)
Flink assignTimestampsAndWatermarks 深度解析:时间语义与水印生成
目录 概述 时间语义 时间戳分配 水印的作用 最佳实践 案例分析 注意事项 应用场景 概述 在Apache Flink中,assignTimestampsAndWatermarks是一个重要的方法,它允许数据流处理程序根据事件时间(event time)分配时间戳和生成水印(watermarks)。这个方法通常用于处理…...
![](https://www.ngui.cc/images/no-images.jpg)
C++排序算法——合并有序数组
合并有序数组 思路 我们可以设想一个排序的函数 这个函数里 我们有三个while while(第一次的执行条件) {先进行第一次的合并 } while(第二次的合并条件) { 把a数组在第一次没有排序上的给加进去 }while(第三次的合并条件) { 把b数组在第一次没有排序上的给加进去 }看完了这个…...
![](https://img-blog.csdnimg.cn/direct/4d4b35c2a5dd42bfa9aac0f3958c1e23.png)
安装pytorch环境
安装:Anaconda3 通过命令行查显卡nvidia-smi 打开Anacanda prompt 新建 conda create -n pytorch python3.6 在Previous PyTorch Versions | PyTorch选择1.70,安装成功,但torch.cuda.is_available 返回false conda install pytorch1.7.0…...
![](https://www.ngui.cc/images/no-images.jpg)
内卷从古到今就一直存在,并不是近年的“新物”,破局在于你是否有意识地学习。
一.背景: 反思自己过去从学生时代到职场时代。“内卷”其实已经一直存在,从古到今都一直存在,也并不是近几年产出的“新物”。已经连续5年高考人数在1000万以上,而今年1300多万达到新高,对于竞争压力如此之大…...
![](https://img-blog.csdnimg.cn/direct/5df722dce13e46fc8c048fd17341d1cf.png)
跟《经济学人》学英文:2024年6月15日这期 The war for AI talent is heating up
The war for AI talent is heating up Big tech firms scramble to fill gaps as brain drain sets in 争夺人工智能人才的战争正在升温 随着人才流失的到来,大型科技公司争相填补空缺 brain drain:人才流失 scramble:争夺;争…...
![](https://img-blog.csdnimg.cn/img_convert/b5377d4703ac41a4d9ebcae95973de2b.png)
港湾周评|高盛眼中的618增长
《港湾商业观察》李镭 年中最重要的购物节618终于尘埃落定了。2024年的618各大电商平台竞技情况如何?又有哪些新的亮点?都成为外界观察消费行为的参考指标。 根据京东618数据显示:累计成交额过10亿的品牌83个,超15万个中小商家销…...
![](https://www.ngui.cc/images/no-images.jpg)
SPSS知识
特点 SPSS的一些特点: 分析结果清晰、直观:SPSS提供了丰富的图表和表格,可以帮助用户直观地理解数据分析的结果。分析结果通常包含详细的统计量、图形和文本描述,使得分析结果易于解释。 易学易用:SPSS的用户界面设计…...
![](/images/no-images.jpg)
石景山区城乡建设委员会网站/怎样申请自己的电商平台
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums [2,5&…...
![](/images/no-images.jpg)
WordPress 镜像同步/广东网站se0优化公司
PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的。他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模块的行为。下面是一…...
![](https://img-blog.csdnimg.cn/20210611164549250.gif)
wordpress上传gif/个人引流推广怎么做
Taro.showToast(option) 显示消息提示框 Taro.showToast({title: 成功,icon: success,duration: 2000 })Taro.showModal(option) 显示模态对话框 Taro.showModal({title: 提示,content: 这是一个模态弹窗,success: function (res) {if (res.confirm) {console.log(用户点击…...
![](/images/no-images.jpg)
上海浦东做网站/全国疫情高峰感染高峰进度查询
环境:Red Hat 6.7 服务端:192.168.163.128 客户端:192.168.163.131 背景:解决多个服务器之间数据共享 环境检查: 1、检查服务器是否安装nfs服务 rpm -q nfs-utils 2、如果没有安装的话执行 yum install …...
![](https://img-blog.csdnimg.cn/img_convert/93c21930dbf1868faf5eaa5353b08e89.png)
广州网站建设制作公司/福州短视频seo网红
预备知识Figma 插件开发本质上是 web 开发,你需要了解基础的 web 开发知识,比如 HTML、CSS、JavaScript。当然,如果要开发一些功能复杂的插件,也许你需要用到一些更高级的工具,比如 TypeScript、Webpack、React 等&…...
![](http://tech.meituan.com/img/meituan_tuangou_order/order_7.png)
wordpress 维基主题/西安seo服务培训
美团团购订单系统优化记团购订单系统简介 美团团购订单系统主要作用是支撑美团的团购业务,为上亿美团用户购买、消费提供服务保障。2015年初时,日订单量约400万~500万,同年七夕订单量达到800万。 目标 作为线上S级服务,稳定性的提…...