jstack查看进程的堆栈信息并保存
生产环境中有时候服务器可能会出现资源占用情况飙升等问题,这时候需要检查开发的程序,可以使用jstack命令
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息
命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
参数说明:
pid: java应用程序的进程号,一般可以通过jps来获得;
executable:产生core dump的java可执行程序;
core:打印出的core文件;
remote-hostname-or-ip:远程debug服务器的名称或IP;
server-id: 唯一id,假如一台主机上多个远程debug服务;
下面以实际操作来演示使用jstack来查看资源占用最高的进程的堆栈信息
-
使用top命令查看java进程中最耗费资源的pid
-
使用top -Hp pid找到上面步骤中pid内最耗资源的pid
-
计算第二步线程的pid的十六进制 printf “%x\n” pid
-
使用jstack定位第二步找出的pid的详细信息 jstack pid | grep 十六进制进程 -A 100
-
由于上一步骤是在root用户下进行的,使用nifi用户执行jstack命令
-
保存完整堆栈信息 sudo -u 用户 jstack pid >> filename.log
-
也可以使用jmap命令生产dump文件(体积比较大),文件在/home下
sudo -u nifi jmap -dump:format=b,file=nifi20200105.dump 11215