性能测试_cpu问题排查

一、cpu问题现像

举个例纸:

第一步:我轻轻一压,才用了5个线程 ,cpu就被占满了,平均负载也很高

第二步:用pidstat 1   (用于监控全部或指定进程的cpu情况,每1秒刷新一次) 

排在前面的,就是我压测的java程序

记住这个进程号,后面排查问题有用:11938

PID:进程ID

%usr:进程在用户空间占用cpu的百分比

%system:进程在内核空间占用cpu的百分比

%guest:进程在虚拟机占用cpu的百分比

%CPU:进程占用cpu的百分比

CPU:处理进程的cpu编号

Command:当前进程对应的命令

第三步:知道了这个进程的id后,我们来看看他里面的哪个线程占的最高

用top Hp pid 展示某个进程下的所有线程

看到了排名占cpu比较大的线程

第四步:查看定位线程下的哪个代码会引发这个问题

我们可以找到占用cpu比较高的线程id 18537

下面我们来用jstack工具:这个工具可以打印出java里的线程的堆栈信息,但是jstack出的日志,线程id是16进制的,因此要先将线程id 转化为16进制

printf  "%x\n"   线程id  :printf "%x\n"  18537      

第5步:执行jstack 打印该线程的堆栈信息

jstack -l 进程的pid | grep 线程16进制pid  -A 10 :意思是打印进程中,XX线程的堆栈信息,显示后十行

jstack -l 11938 | grep 4869 -A 10

红框中就是出问题代码的位置:这个地方是个死循环

二、第二种方式:用一个工具show-busy-java-threads,这个工具对jstack做了一层封装

1、下载方式:wget --no-check-certificate https://raw.github.com/oldratlee/useful-scripts/release/show-busy-java-threads

2、执行方式很简单:./show-busy-java-threads

我们同样能定位到这行代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值