jstack:目标进程没有响应

我正在运行Ubuntu服务器版,我想要采取一个Tomcat的线程转储。

所以,我第一次试图找出哪个PID tomcat使用:

$ jps -l 5809 sun.tools.jps.Jps 

但它不在?

所以,我用top来找出PID 5730。

然后我调用jstack来获取线程转储:

 $ sudo jstack -l 5730 5730: Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding 

这是怎么回事? 🙁

我已经尝试导出CATALINA_TMPDIR Jstack和Jstat中所述停止升级到JDK6u23,但是这并没有改变任何东西:

 $ export CATALINA_TMPDIR=/tmp $ sudo /etc/init.d/tomcat6 restart * Stopping Tomcat servlet engine tomcat6 ...done. * Starting Tomcat servlet engine tomcat6 ...done. $ sudo jstack -l 5934 // new PID after restart 5934: Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding 

更新:

我也试过sudo -u tomcat6 jstack -l -F 5730 > threaddumpexceptions2.txt但是它只给了我很多例外的控制台。

我做了两件事情:

  1. 更改来电: sudo -u tomcat6 jstack -J-d64 -m pid
  2. 用Sun原来的sun-6-jdk和sun-6-jre软件包取代了OpenJDK

第1部分说明:我切换到64位模式,使用sudo并以Tomcat用户身份运行命令。

注意:第2部分可能没有必要。 对于一些用户来说,第1部分就够了。 实际上,试着首先添加sudo命令。 它可能已经诀窍。

我想你需要像运行Tomcat进程的用户一样运行jstack。 还要注意,jps只返回当前用户的进程。 通过使用sudo运行jps或作为Tomcat进程用户,您将获得Tomcat进程的pid。

这个错误报告也可能是有用的: https : //bugs.launchpad.net/ubuntu/+source/sun-java6/+bug/597098

@Valmar,我在这里find相同的主题。 无法获得线程转储? 任何想法为什么我的应用程序块

看起来解决方法是sudo -u tomcat6 kill -3 <pid>

这也适用于我:

sudo -u tomcat6 kill -3 pid

它看起来没有任何反应,但是当你在日志中查看堆栈在那里。 如果你不期待他们,他们看起来像例外。

我发现使用'ps -eo pid,user,command |'这样的东西很有用 grep java'来查找正在使用的实际java命令,然后使用该目录查找匹配的jstack等。

 # ps -eo user,command | grep '[j]ava' | cut -d' ' -f1 someuser /usr/lib/jvm/java/bin/java # /usr/lib/jvm/java/bin/java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 

所以它的64位,以“someuser”运行。 su到那个用户并运行从同一个目录运行jstack等。 (即/ usr / lib / jvm / java / bin / jstack

在使用各种不同的Java安装/实现的服务器上时很有用。

尝试切换到处理用户,然后使用jstack:

sudo -u {处理用户} jstack>转储

我有同样的问题,但没有解决scheme为我工作:

 jstack <pid> jstack -J-d64 -m <pid> sudo -u <user> jstack ... 

我终于将JDK从jdk1.6.0_24升级到了jdk1.7.0_67,并且每件事情都起作用了。

对于有此问题的Tomcat用户,请检查您的catalina.out日志文件。

我有同样的问题“22693:无法打开套接字文件:目标进程没有响应或热点虚拟机未加载”。 我放弃了,试图findclosures之前发生的事情,但是之后在日志文件中有jstack输出。