springboot应用cpu飙升的原因排除

1、通过top或者jps命令查到是那个java进程, top可以看全局那个进程耗cpu,而jps则默认是java最耗cpu的,比如找到进程是196  

    1.1  top (推荐)或者jps命令均可

2、根据第一步获取的进程号,查询进程里那个线程最占用cpu,发现590消耗最多

   top -p 196 -H 

3、把堆栈信息dump到本地存储

    jstack  196 > ~/jstack.log

4、查询jstack.log相关的 ,pid为 715 的值,可以查看堆栈信息,找到具体的业务代码

5、发现196进程里的线程id:715是最耗cpu的,可以使用linux命令直接kill掉,杀死线程命令是 两个 -- 

    kill  --715

======================下面代码可以考虑不看==================================

6、需要注意的是,在jsatck命令展示的结果中,线程id都转换成了十六进制形式。可以用如下命令查看转换结果,也可以找一个科学计算器进行转换。主要查看NID的值(jdk8是16进制,jdk21是10进制)

把590的转换成十六进制  :

    printf  "%x"  590  

或者

转换线程号printf %x 38,查询堆栈jstack 16| grep nid=0x26 -A 10

7、 24e 代表线程的信息,可以24e的值,把jstack 196 > jstack.log 导出的文件,查找相应的线程信息。 目前发现590也能搜到数据,而24e搜不到数据。 所以 4,5可能是错误的。参考文档

https://www.bilibili.com/video/BV15T4y1y7eH/?spm_id_from=333.337.search-card.all.click&vd_source=7d7f4a21d00a9323f6fdc67c7ae8e0f2

面试官:生产环境碰到系统CPU飙高和频繁GC,你要怎么排查? 白天不懂夜的黑_生产环境如何查看gc-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值