【笔记】排查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)不停的闪,我的钛合金狗 ...
随机推荐
- Kafka学习(二)
作者:程序员cxuan链接:https://www.zhihu.com/question/53331259/answer/1262483551来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...
- Ajax的核心的对象是什么?
Ajax的核心对象是XMLXMLHttpRequest 对象. XMLHttpRequest提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在 ...
- 关于kafka客户端版本与服务端版本不一致导致的一次坑
上周开发了一个功能,需要使用kafka接上游数据并入库,本地开发时,自己安装了一个kafka服务,开发测试时使用本地的kafka服务给主题发消息,然后在自己本地的代码中进行调试.使用的kafka版本如 ...
- SQLAlchemy 使用教程
前戏: 不用怀疑,你肯定用过Django中的orm,这个orm框架是django框架中自己封装的,在Django中配置和使用较为简单,但是并不适用于其他web框架,而今天说的sqlalchemy是 ...
- POJ 2236:Wireless Network
描述 n台电脑,如果两台电脑间的距离的d范围内,则两台电脑能够连通. 如果AB连通,BC连通,则认为AC连通. 已知电脑台数N,最大距离d,以及每个电脑的坐标.有如下两种操作: O i 表示修复编号为 ...
- CSS3渐变效果工具
推荐一个css3渐变效果工具,觉得有帮助的可以收藏下. 工具链接 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡.CSS3 定义了两种类型的渐变(gradient ...
- 使用 Vuex + Vue.js 构建单页应用
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...
- 微信小程序要求HTTPS,如何选择SSL证书?
为了保护小程序应用安全,微信官方的需求文档要求,每个微信小程序必须事先设置一个通讯域名,并通过HTTPS请求进行网络通信,不满足条件的域名和协议无法请求.因此开发者应先准备好配置好HTTPS证书的域名 ...
- sqlite的Query方法操作和参数详解
query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数: SQLiteDatabase db = databaseHelper.getWritableDatabas ...
- 认识 Function.prototype.bind()
欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...