尝试在 Windows 服务器中收集 Apache Tomcat8.5 的线程转储,我结束了使用 jstack
和 psexec
如下(因为直接使用 jstack 是不可能的,所以我我正在使用 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 工具。
关于java - 使用 jstack 清空 Tomcat 线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58853893/