Install4j:是否可以配置一个 install4j 启动程序来响应 kill -3 并生成线程转储?

Install4j: Is is possible to configure an install4j launcher to respond to kill -3 and generate a thread dump?

我想自动创建线程转储作为我编写的日志收集脚本的一部分。

我知道可以使用 jstack 或 kill -3 生成线程转储。客户 运行 日志收集脚本将只安装 JRE,因此 jstack 不是一个选项。

如果我使用 jstack 和 install4j 启动程序创建的 JVM 的 pid,我会得到线程转储...但是使用相同的 pid 调用 kill -3 不会生成任何输出。我目前正在使用 install4j 启动器配置将 stderror 和 stdout 定向到文件。

这是一个 linux 启动器,配置了服务选项。

FWIW...我试过不引导输出,并且 运行 我的应用程序作为控制台程序而不是服务,其中 none 允许 'kill -3' 工作。

我正在使用 install4j 6.0

最后,我不想使用 -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=dump.log 因为它可能会产生未知的开销。

如有任何帮助,我们将不胜感激!

我建议使用 ThreadMXBean 在同一进程中以编程方式获取此信息,而不是使用来自另一个进程的信号处理程序。 API 文档位于

http://docs.oracle.com/javase/8/docs/api/java/lang/management/ThreadMXBean.html

Here's a full example 如何使用这个 MBean。

通过这种方式,您可以将信息显式写入您想要的任何位置。