【笔记】排查CPU占用过高
2022/2/13 23:44:48
本文主要是介绍【笔记】排查CPU占用过高,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文是该教程视频的笔记 https://www.bilibili.com/video/BV15T4y1y7eH
1. 问题演示
- 将演示项目打包放到服务器运行
- 执行 curl http://localhost:8080/demo01/test 返回 success 说明项目运行正常
- 执行三次 curl http://localhost:8080/demo01/loop,模拟死循环问题
- 执行 curl http://localhost:8080/demo01/deadlock,模拟死锁问题
@RestController @RequestMapping("/demo01") public class Demo01Controller { private Object lockObj1 = new Object(); private Object lockObj2 = new Object(); @RequestMapping("/test") public String test() { return "success"; } /** * 死循环 */ @RequestMapping("/loop") public String loop() { System.out.println("开始循环"); while(true) { // } } /** * 死锁 */ @RequestMapping("/deadlock") public String deadlock() { //第一个线程 new Thread(() -> { synchronized (lockObj1) { try { TimeUnit.SECONDS.sleep(1); } catch (Exception e) {} synchronized (lockObj2) { System.out.println("first thread over"); } } }).start(); //第二个线程 new Thread(() -> { synchronized (lockObj2) { try { TimeUnit.SECONDS.sleep(1); } catch (Exception e) {} synchronized (lockObj1) { System.out.println("second thread over"); } } }).start(); return "success"; } }
2. 执行top命令,找出占用cpu较高的进程
top
很明显进程号 14325 占用CPU过高,接下来需要重点排查它了
3. 找到进程中占用CPU过高的线程
top -p 14325 -H
占用CPU过高的是最上面的三个线程 14584、14613和14617,接下来就排查他们的情况
4. 使用 jstack 工具命令生成线程快照
jstack 14325 > cpuoverflow.txt
5. 在线程快照 cpuoverflow.txt 中查找对应的线程号,观察它的执行状态
注意:线程快照文件中的线程号是十六进制,查找的时候需要先将十进制数字转为十六进制
执行 printf "%x" 14584 输出的就是十六进制的值了
less cpuoverflow.txt
less 命令,G 跳到末尾,g 跳到开头,/ +搜索词,b 上一页,空格或回车 下一页
这一步就精准定位到了类的行号了,再接下来的工作就是排查代码逻辑了,看为什么出现CPU占用过高的问题
6. 线程快照末尾记录着死锁相关的信息
这篇关于【笔记】排查CPU占用过高的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
- 2024-12-31自学记录鸿蒙 API 13:实现人脸检测 Core Vision Face Detector
- 2024-12-31在C++中的双端队列是什么意思,跟消息队列有关系吗?-icode9专业技术文章分享
- 2024-12-31内存泄漏(Memory Leak)是什么,有哪些原因和优化办法?-icode9专业技术文章分享
- 2024-12-31计算机中的内存分配方式堆和栈有什么关系和特点?-icode9专业技术文章分享
- 2024-12-31QT布局器的具体使用原理和作用是什么?-icode9专业技术文章分享
- 2024-12-30用PydanticAI和Gemini 2.0构建Airflow的AI助手