cpu过高问题排查步骤以及命令
1.通过 top 命令找到 CPU 消耗最高的进程,并记住PID[进程ID]。
2.通过 top -Hp [PID] 找到 CPU 消耗最高的[线程ID],并记住[线程ID].
3.线程ID是十进制的,而堆栈信息中的线程ID 是16进制的,因此我们需要将10进制的转换成16进制的,并用这个线程ID在堆栈中查找。用 printf "%x\n" [十进制数字] ,将10进制转换成16进制。
4.通过 jstack 工具 dump 线程堆栈信息到指定文件中。具体命令:jstack -l [进程ID] > jstack.log
5.根据刚刚转换的16进制数字从堆栈信息里找到对应的线程堆栈。就可以从该堆栈中看出端倪。也可以使用命令:
less 8177.txt |grep -C30 [16进制]
##后台启动jar命令(nohup是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行)
nohup java -jar mall-api.jar >> apilog.log 2 > &1 &
##查询运行文件所在路径
which java