本文是该教程视频的笔记 https://www.bilibili.com/video/BV15T4y1y7eH

1. 问题演示

@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占用过高的更多相关文章

  1. 如何排查CPU占用太高

    线上项目运行时,出现问题不像在本地那么容易排查,经常需要借助日志.或者一些工具来找出问题.cpu被占满我们经常会遇到.比如我们有这样一段代码: public Class Demo1_16 { publ ...

  2. SQLSERVER排查CPU占用高的情况

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  3. 一次java Cpu占用过高的排查

    某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了排查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息 ...

  4. java 一次CPU占用过高问题的排查及解决

    最近一段时间  某台服务器上的一个应用总是隔一段时间就自己挂掉      用top看了看  从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...

  5. 性能优化-CPU占用过高问题排查

    1. 性能优化是什么? 1.1 性能优化就是发挥机器本来的性能 1.2 性能瓶颈在哪里,木桶效应.   CPU占用过高 1.现象重现 CPU占用过高一般情况是代码中出现了循环调用,最容易出现的情况有几 ...

  6. 记一次用arthas排查jvm中CPU占用过高问题

    记一次使用arthas排查jvm中CPU占用过高问题.这工具屌爆了 碾压我目前使用的全部JVM工具. 安装 小试 curl -O https://arthas.aliyun.com/arthas-bo ...

  7. sql server cpu占用过高优化

    SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...

  8. kswapd0 进程CPU占用过高

    前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...

  9. Android去除CPU占用过高时屏幕四周闪红框

    话说有些时间没有更新博客了,今天正好解决这个问题,顺便把它记录下来.. 今天遇到的情况是这样的,当CPU占用过高时,屏幕四周会出现一个红框. 闪一次两次算了,但是挺萌的(TMD)不停的闪,我的钛合金狗 ...

随机推荐

  1. path()和re_path()用法&区别

    path() 参数列表: 参数1:字符串类型,用来匹配请求路径 参数2:指定路径所对应的视图函数名 参数3:关键字参数 实际用的不多 参数4... # urls.py # 创建子应用的路由文件 fro ...

  2. 用腾讯云Gogs搭建私有git服务器

    前言 经常有需要写不能公开代码的项目,所以只好自己搭建一个私人的git服务器 Gogs的好处在于比Gitlib轻量化了好多,而且是国人写的,官方主页也是中文的 Gogs首页 腾讯云服务器配置: Ubu ...

  3. 我对arguments.callee的理解

    基本理解: 你怎么看待一个函数呢?又如何看待一个函数对象呢?函数和Function之间的关系到底是什么?我觉得理解这些对理解arguments.callee有所帮助. 先说说auguments.cal ...

  4. MyBatis 框架适用场合?

    1.MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案. 2.对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是 不错的选择.

  5. 什么时候使用ConcurrentHashMap?

    在问题2中我们看到ConcurrentHashMap被作为故障安全迭代器的一个实例,它允许完整的并发检索和更新.当有大量的并发更新时,ConcurrentHashMap此时可以被使用.这非常类似于Ha ...

  6. django中动态新建postgres数据库表

    import psycopg2def create_new_table(table_id): conn = psycopg2.connect(database='Test', user='postgr ...

  7. 什么是 spring?

    Spring 是个 java 企业级应用的开源开发框架.Spring 主要用来开发 Java 应用, 但是有些扩展是针对构建 J2EE 平台的 web 应用.Spring 框架目标是简化 Java 企 ...

  8. ArrayList跟LinkedList的区别

    ArrayList和LinkedList都是实现list接口,它们不同如下: ArrayList是基于索引的数据接口,底层是数组.它可以以O(1)时间复杂度对元素进行随机访问.与此相对,linkedL ...

  9. ARM指令集详解--汇编

    1.       汇编 1.1.    通用寄存器 通用寄存器 37个寄存器,31个通用寄存器,6个状态寄存器,R13堆栈指针sp,R14返回指针,R15为PC指针, cpsr_c代表的是这32位中的 ...

  10. Linux下的cman中文帮助手册配置

    Linux下的帮助命令man功能很强大,很好用,但显示的结果是英文,有时候看着还是吃力,就想着要是有man的中文显示结果该多好.网上搜寻一番后,终于找到解决方案,很简单,亲测有效.具体步骤如下: su ...