一、应用场景:

  当linux服务器出现异常情况(响应缓慢,负载持续飙升)并且服务器没有安装对应的包而无法使用jstack等命令时,可以使用linux的kill相关命令打印堆栈信息。

  命令格式:kill -3 PID

二、执行步骤:

2.1、获取java进程的PID

ps -ef|grep java

kill -3 pid命令获取java应用堆栈信息-LMLPHP

结果的第二列数字就是进程对应的pid。

2.2、kill -3 PID

(1)如果项目通过Tomcat进行发布(普通的web项目),则对应的堆栈信息会打印在catalina.out文件中。

(2)如果项目是基于SpringBoot并且使用nohup java -jar xxx.jar & 命令运行,则java堆栈信息会在jar包所在的nohup.out文件中。

三、查看堆栈信息

以nohup.out文件为例:

3.1、cd命令进入SpringBoot jar包所在的目录

3.2、vim nohup.out命令打开文件

3.3、按Shift+G快捷键跳到文件的末尾,再连续按Ctrl+B,直到向上翻页找到堆栈信息(有java.lang.Thread.State关键字)

或者直接输入/java.lang.Thread.State再按Enter键,就可以高亮出关键字,再按N键,可以遍历查看。

 kill -3 pid命令获取java应用堆栈信息-LMLPHP

vim常用翻页快捷键如下

注:kill -3 PID命令只能打印那一瞬间java进程的堆栈信息,适合在服务器响应慢,cpu、内存快速飙升等异常情况下使用,可以方便地定位到导致异常发生的java类,解决如死锁、连接超时等原因导致的系统异常问题。该命令不会杀死进程。

02-25 01:01