我想获取在jboss服务器上运行的我的Web应用程序的线程转储。
我为我的问题找到了两个解决方案:
有人可以向我解释这两种方法之间的区别吗?
提前致谢!
答案 0 :(得分:18)
jstack
命令可以获取在远程计算机上运行的程序的线程转储,它也适用于Windows。
kill -3
仅适用于本地程序,而且在Windows上没有kill
。
答案 1 :(得分:2)
来自jstack的oracle page:
jstack pid选项的输出与在应用程序控制台(标准输入)按Ctrl + \或通过向进程发送QUIT信号获得的输出相同。
还要记住Ctrl+\ is equivalent to a SIGQUIT
。
kill -l向我们显示所有信号。遵循此提示3意味着SIGQUIT
所以基本上他们两个都完全一样,即要求一个coredump。以下是与jstack相关的一些指示:
关于官方支持,来自jstack man page:
打印Java进程,核心文件或远程调试服务器的Java线程堆栈跟踪。此命令是实验性的,不受支持。
此实用程序不受支持,可能在将来的JDK版本中不可用。在不存在dbgeng.dll文件的Windows系统中,必须安装Windows调试工具,以便这些工具正常工作。
关于输出差异,它的基本相同。输出之间存在一对一的映射。请参阅我的output for the same application,以演示kill -3
和jstack
的状态之间的映射。状态之间的映射是:
kill -3 | Jstack
------------------------------
RUNNABLE | IN_NATIVE
TIMED_WAITING | BLOCKED
WAITING | BLOCKED (PARK)
答案 2 :(得分:-1)
在Windows中,你有一些名为" taskkill / PID {yourpid} / F"用于杀戮过程。可以从netstat命令获取进程ID,或使用viusal vm获知进程ID