我正在运行 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 许可协议
我通过做两件事让它工作:
sudo -u tomcat6 jstack -J-d64 -m pid
第 1 部分的说明: 我切换到 64 位模式,使用
sudo
并以 Tomcat 用户身份运行命令。注意: 第 2 部分可能不是必需的。对于某些用户来说,第 1 部分似乎就足够了。事实上,首先尝试只添加
sudo
命令。它可能已经成功了。