jstack:目标进程没有响应

新手上路,请多包涵

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

因此,我首先尝试找出 tomcat 使用的 PID:

 $ 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

这是怎么回事? :-(

我已经尝试按照 Jstack 中的描述导出 CATALINA_TMPDIR,并且 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 但它只在控制台上给了我很多异常。

原文由 Timo Ernst 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

我通过做两件事让它工作:

  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 命令。它可能已经成功了。

原文由 Timo Ernst 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为您需要以运行 Tomcat 进程的同一用户身份运行 jstack。另请注意,jps 仅返回当前用户的进程。您可以通过使用 sudo 或作为 Tomcat 进程用户运行 jps 来获取 Tomcat 进程的 pid。

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

原文由 Michael Pigg 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题