【笔记】排查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占用过高的更多相关文章
- 如何排查CPU占用太高
线上项目运行时,出现问题不像在本地那么容易排查,经常需要借助日志.或者一些工具来找出问题.cpu被占满我们经常会遇到.比如我们有这样一段代码: public Class Demo1_16 { publ ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- 一次java Cpu占用过高的排查
某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了排查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息 ...
- java 一次CPU占用过高问题的排查及解决
最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...
- 性能优化-CPU占用过高问题排查
1. 性能优化是什么? 1.1 性能优化就是发挥机器本来的性能 1.2 性能瓶颈在哪里,木桶效应. CPU占用过高 1.现象重现 CPU占用过高一般情况是代码中出现了循环调用,最容易出现的情况有几 ...
- 记一次用arthas排查jvm中CPU占用过高问题
记一次使用arthas排查jvm中CPU占用过高问题.这工具屌爆了 碾压我目前使用的全部JVM工具. 安装 小试 curl -O https://arthas.aliyun.com/arthas-bo ...
- sql server cpu占用过高优化
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- kswapd0 进程CPU占用过高
前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...
- Android去除CPU占用过高时屏幕四周闪红框
话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...
随机推荐
- 文档类型声明<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- java 基础知识(三)
Arraylist与Vector的区别 清浅池塘 程序员,专栏:Java那些事儿唯一作者,咨询前请先点详细资料 162 人赞同了该文章 这几天工作有点忙,有很多代码需要写,更新文章有点慢,说声抱歉 ...
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对. 因为equals()方法可以用开发者重写,hashCode()方法也可以由开发者来重写,因此它们是否相等并没有必然的关系. 如果对象要保存在HashSet或HashMap中,它们的equals( ...
- 如何使用 Spring Boot 实现分页和排序?
使用 Spring Boot 实现分页非常简单.使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法.
- Spring 的优点?
(1)spring属于低侵入式设计,代码的污染极低: (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性: (3)Spring提供了AOP技术,支持将一些通用任务,如安全. ...
- java-設計模式-工場方法
工廠方法: 一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中. 这满足创建型 ...
- 关于 OOP 和设计模式?
这部分包含 Java 面试过程中关于 SOLID 的设计原则,OOP 基础,如类,对象, 接口,继承,多态,封装,抽象以及更高级的一些概念,如组合.聚合及关联. 也包含了 GOF 设计模式的问题.
- 信号量,semaphore源代码之我见
信号量,Semaphore,一个限定访问线程数量的工具类,属于并发包java.util.concurrent 里面的类. Semaphore,内部提供了构造方法(包含默认的非公平信号量构造方法,已经可 ...
- ctfhub密码口令
弱口令 进入环境 使用burpsuit抓包爆破 密码长度不一样应该密码就为他 即可找到 默认口令 进入环境一开始不懂百度借鉴原来是要看常见设备默认口令 很快就找到了 一个一个的试 即可获得答案
- 浏览器视图层级中的“根”:<html>和<body>的属性研究
做前端开发的同学都会知道,每一个UI系统(比如IOS或Android)中都会有一个view hierarchy(视图层级)的概念,即所有的可视元素(大到一个页面,小到一个button)都在一个树形结构 ...