问题排查常用方法

Top 找到占cpu最高的那个java进程,

然后top -Hp 刚才那个进程号,找到该进程下最耗时的线程号,

printf "%x\n"  该线程号 转成16进制,然后grep这个16进制线程号,找到对应java代码,然后查看是否有问题

jstack 30162|grep -A 20 76c8
 

"sentinel-time-tick-thread" daemon prio=10 tid=0x00007f9e5800a000 nid=0x76c8 sleeping[0x00007f9e8082c000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at java.lang.Thread.sleep(Thread.java:340)
        at java.util.concurrent.TimeUnit.sleep(TimeUnit.java:360)
        at com.alibaba.csp.sentinel.util.TimeUtil$1.run(TimeUtil.java:37)
        at java.lang.Thread.run(Thread.java:745)

"DubboServerHandler-100.73.44.63:20880-thread-64" daemon prio=10 tid=0x00007f9e608da000 nid=0x76c7 waiting on condition [0x00007f9e8092d000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000700335a80> (a java.util.concurrent.SynchronousQueue$TransferStack)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
        at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

 

生产上不方便的话可以用btrace的方式

 

 

具体参考文献:

top+jstack分析cpu过高原因

https://blog.csdn.net/ct29102656/article/details/51882946

转载于:https://my.oschina.net/u/3729778/blog/1928849

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值