排查Java程序cpu飙升问题

相关知识点

相关cpu的概念参考:https://blog.csdn.net/sunlianglong/article/details/86642588
1.物理CPU
2.cpu核数
3.逻辑CPU(逻辑核)
4.cpu信息记录在/proc/cpuinfo中
5.Linux中的top相当于winwods系统中的任务管理器
6.cpu总核数 = 物理cpu个数每颗cpu的核数
总逻辑cpu数= 物理cpu个数
每颗cpu的核数* 超线程数

查询命令

查看物理cpu个数

cat /proc/cpuinfo| grep "physical id" | sort| uniq| wc -l

查看每个物理cpu的核数

cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑cpu核数

cat /proc/cpuinfo| grep "processor" wa -l

排查cpu飙升的基本步骤

1.top命令查看各进程的CPU使用情况,可以top | grep java筛选出Java程序
2.ps查看具体某个进程使用率及一些相关信息:ps -mp pid -o THREAD,tid,time
3.将2中查询出来的线程id转换成16进制
printf ‘%x\n’ tid(比如2320) , 结果为910
4.输出具体线程下的进程的堆栈信息:jstack 2308 | grep 910 -A100(表示输出多少行)

cpu负载和cpu利用率的区别

cpu负载:我的理解是需要cpu去处理的任务量
cpu利用率:指当前正在运行的进程实时占用cpu的百分比,是对一段时间内cpu的使用状况的统计
如果负载很高,利用率很低:说明处于等待状态的任务很多,负载越多,代表可能存在僵死的进程越多,通常这种是IO密集型的任务,大量的请求在请求相同的IO,导致任务队列堆积,同样可以使用top查看使用情况,然后查看是否有存在D+状态的进程,D+值得是不可中断的睡眠状态进程,处于这个状态的进程是无法终止的,也无法自行退出,只能通过恢复其依赖资源或者重启系统来解决。
如果负载很低,利用率很高:这可能就是代码本身有问题,或者是计算密集型任务,也是通过top命令去排查

以上知识点只是记录一下个人理解,一些命令不常用也记不住,记录一下,用到时可查询,有理解不到位的地方,望指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值