Skip to content

问题解决方案

cpu飙升100%

Java常见cpu飙升100%问题定位通常有两种方案:

  • 使用jstack

  • 使用arthas

使用jstack

jstack是jdk自带的命令,使用jstack命令可以查看当前java进程的堆栈信息,如果堆栈信息中存在死循环,则说明java进程存在cpu飙升问题。

  1. 使用top命令(按M可以排序)查看cpu占用较高的进程,并记录进程id。
  2. 使用top -Hp 进程id可以查看哪个线程占用较高。
  3. 直接定位到线程编号使用printf "%x\n" 线程编号命令将线程编号转为16进制并记录,如果能定位到线程名最好。
  4. 使用jstack -l 进程id去找nid=0x16进制线程id或者线程名对应的线程栈信息定位问题以及问题代码所在。

使用arthas

安装及使用流程见官网:快速入门 | arthas

arthas使用相较于jstack更方便些,它提供了一个操作相对简单的面板。

大致流程如下:

  1. 启动arthas
  2. 选择飙升的进程进入控制台
  3. 输入dashboard查看进程信息
  4. thread -n 1打印最忙线程信息
  5. 查看最忙线程信息即可定位相关问题