我们服务器上的的服务和项目大部分都是java的,现在来讲讲,这种服务器cpu100%如何定位。
  1. 先使用top命令找到cpu最高的进程。比如找到cpu最高的进程id,简称top_pid。
  2. 使用top -Hp top_pid找到cpu最多的线程,这里记住最高的几个线程id,thread_id。
  3. 现在我们将这些线程id转化成16进制,因为java堆栈里的线程id都是16进制的,转化后方便我们定位printf “%x\n” thread_id
  4. jstack top_pid,打印出堆栈,然后用3步骤里找到的十六进制线程id,找到对应的堆栈
上面的方法是可以帮我们定位出问题,但是4个步骤还是太麻烦,我们也可以使用一些比较方便工具简化定位。
  1. 使用工具show-busy-java-threads.sh

show-busy-java-threads.sh(https://github.com/oldratlee/useful-scripts)

  1. 使用arthas

https://alibaba.github.io/arthas/index.html