前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU飙高排查

CPU飙高排查

作者头像
doper
发布2022-09-26 17:48:19
2K0
发布2022-09-26 17:48:19
举报
文章被收录于专栏:后台技术杂项笔记

SpringBoot应用 CPU飙高排查

1. 准备

创建SpringBoot Web应用,访问/test/t1会死循环

image-20220605212840091
image-20220605212840091

访问/test/t2会死锁

image-20220605213025647
image-20220605213025647

2. 模拟

访问两次/test/t1,一次/test/t2

image-20220605213123307
image-20220605213123307

3. 排查

3.1 排查CPU问题

此时使用top命令看一下进程

image-20220605213235695
image-20220605213235695

可以看到进程5510占用大量CPU

此时看看进程5510里面是哪个线程导致这种结果

代码语言:javascript
复制
top -p 5510 -H
image-20220605213432322
image-20220605213432322

可以看到是线程55625563占用大量CPU,转化为16进制,方便带回查询堆栈定位。

image-20220605213523927
image-20220605213523927

接下来打印出该进程的堆栈信息

代码语言:javascript
复制
jstack 5510 > info.txt

此时进程5510的堆栈信息已经保存在info.txt中,vim查看,然后定位线程15bb和线程15ba的堆栈信息。

image-20220605213712179
image-20220605213712179

可以看到线程运行在17行的位置,看一下代码17行。

image-20220605213733238
image-20220605213733238

可以看到17行确实是死循环的位置。

3.3 排查死锁问题

在上述打印出堆栈信息到info.txt后,在信息的最后可以看到死锁信息

image-20220605213923421
image-20220605213923421

查看代码41行和33行

image-20220605214216667
image-20220605214216667

找到线程死锁位置。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot应用 CPU飙高排查
  • 1. 准备
  • 2. 模拟
  • 3. 排查
    • 3.1 排查CPU问题
      • 3.3 排查死锁问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档