java服务CPU过高如何定位

一、查看系统状况

top命令查看CPU、内存等使用情况,这种命令可以动态的获取cpu、内存等信息
top
如果知道具体的业务可以指定对应的进程号
top -p pid
不过一般java服务不仅仅只是一个主线程,还会有很多线程,因此往往需要将线程也给打印出来
top -Hp pid
这里我们会发现COMMAND这一列的字符串显示了线程号(不过是被截断过的),这里我们可以使用-c bw {number} 进行命令的增强显示命令行
top -Hp pid c -bw 500
补充01: 我们可以使用ps命令根据cpu使用率进行排序
ps H -eo user, pid, ppid, tid, time, %cpu,cmd --sort=-%cpu |grep 进程号 
简单的查看线程的信息命令可以使用ps -T -p -pid
补充02:如果是瞬时冲高的线程可以使用top实时地跟踪非常有效,为了查看线程是不是一直存在而且占用cpu, 可以使用命令
ps -mp pid -o THREAD,tid,time
time这一列对应时间也就对应线程占用了多长的时间
补充03:
可以使用Linux命令pstack查看某个进程的当前线程栈运行情况

二、定位问题线程

通过步骤一我们已定位到cu占用率很高的线程
2.1 将线程id转换为16线程
printf "%x" xxx
2.2 jstack 查看线程堆栈信息
jstack 命令打印线程堆栈信息,命令格式:jstack pid | grep -A 20 tid, 其中-A 20代表显示匹配上之后的代码的20行
根据打印处理的代码堆栈的代码行号的,就能找到对应的代码位置了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_Kite

你的鼓励,是我不断创作的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值