jvm:CPU过高定位

CPU过高定位

top + jstack

1 top命令查看cpu占用最高的进程

top

这里看到36032进程最高
在这里插入图片描述

2 top -Hp pid查看进程中线程运行情况

top -Hp 36032

看到这个进程中线程的运行情况, 这里36044这个线程占用最高
在这里插入图片描述

3 printf %x 进程号转换成16进制

进程号转换成16进制,得到8ccc

printf %x 36044

在这里插入图片描述

4 jstack pid > 1.txt 查看该进程的堆栈状况

jstack 36032 > 1.txt

根据线程id查看问题线程的后面30行, 找到有问题的代码

cat 1.txt | grep -A 30 8ccc

在这里插入图片描述

CPU过高的场景有哪些:

  1. 无限循环 while
  2. 频繁GC , 需要降低收集频率
  3. 频繁创建新对象 , 需要合理使用单例
  4. 序列化和反序列化,大部分因为使用不合理的类库, 需要使用合理的api类库
  5. 正则表达式,字符串匹配时会频繁回溯,需要减少字符串匹配期间执行的回溯
  6. 频繁的线程上下文切换

参考: https://blog.csdn.net/weixin_44588186/article/details/124680586

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值