kill -3 或 jstack :有什么区别?
2022-09-03 01:42:36
我想获取在 jboss 服务器上运行的 Web 应用的线程转储。
我为我的问题找到了两种解决方案:
- 使用 unix 命令 : kill -3
- 使用 JDK 中存在的 jstack 工具。
任何人都可以向我解释这两种方法之间的区别吗?
提前致谢!
我想获取在 jboss 服务器上运行的 Web 应用的线程转储。
我为我的问题找到了两种解决方案:
任何人都可以向我解释这两种方法之间的区别吗?
提前致谢!
该命令可以获取在远程计算机上运行的程序的线程转储,并且也适用于 Windows。jstack
kill -3
仅适用于本地程序,而在 Windows 上则没有 。kill
从 jstack 的 oracle 页面:
jstack pid 选项的输出与在应用程序控制台(标准输入)上按 Ctrl+\ 或向进程发送 QUIT 信号获得的输出相同。
还要记住.Ctrl+\ is equivalent to a SIGQUIT
kill -l 向我们显示所有信号。在此提示 3 之后表示 SIGQUIT
因此,基本上它们都做完全相同的事情,即要求核心转储。以下是一些与jstack相关的指针:
关于官方支持,来自jstack手册页:
打印 Java 进程、核心文件或远程调试服务器的 Java 线程堆栈跟踪。此命令是实验性的,不受支持。
此实用程序不受支持,在 JDK 的未来版本中可能不可用。在不存在 dbgeng.dll 文件的 Windows 系统中,必须安装 Windows 调试工具才能使这些工具正常工作。
关于输出差异,它基本上是一样的。输出之间存在一对一的映射。请参阅同一应用程序的输出,以演示 和 的状态之间的映射。状态之间的映射为:kill -3
jstack
kill -3 | Jstack
------------------------------
RUNNABLE | IN_NATIVE
TIMED_WAITING | BLOCKED
WAITING | BLOCKED (PARK)