使用 jstack 清空 Tomcat 线程转储

Empty Tomcat thread dumps using jstack

尝试在 windows 服务器中收集 Apache Tomcat8.5 的线程转储我结束了使用 jstackpsexec 如下(因为直接使用 jstack 是不可能的,所以我'm 使用 pexec 使用 syetm 进程执行 jstack):

PsExec.exe -s "C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe" -l 5340 > dumps.txt

5340是运行Tomcat8进程的PID。

执行开始时没有任何错误,并显示以下输出:

PsExec.exe -s "C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe" -l 5340 > dumps.txt

 PsExec v2.2 - Execute processes remotely Copyright (C) 2001-2016 Mark Russinovich Sysinternals - www.sysinternals.com

Starting C:\Program Files\Java\jdk1.7.0_40\bin\jstack.exe on VMNAME...

当我检查 dumps.txt 时,我发现它是空的,即使我是 运行 作为管理员的命令行。

感谢您的帮助!

作为讨论的结论。您需要使用与要检查的 VM 版本相同的 VM 版本来执行 jstack 命令。如果出现任何错误,您可以尝试将 -F 参数添加到 jstack。 此外,您不再需要在较新的 VM 上使用 PsExec 工具。