如何将 "kill -3 <jvm pid>" 标准输出单独重定向到 linux 和 unix 中的文件?

How to redirect the "kill -3 <jvm pid>" stdout to a file singly in linux and unix?

本文关键字:linux 重定向 unix 单独 文件 gt kill lt pid jvm 标准输出      更新时间:2023-10-16

我在linux平台上启动了一个jvm进程,比如tomcat web容器。启动命令行:

nohup-sh>nohup.out 2>&1&

当我执行"kill-3"命令时,线程转储信息将输出到nohup.out文件。

如何将输出重定向到单独的文件?

Sun HotSpot JVM它是jdk 1.5中自己的工具包,称为jstack,它通过使用Sun HotSpot JVM非常有用,但JRockit JVM和HP HotSpot JVM、IBM J9 VM不适合。

如何编写一个良好的通用性工具包,将线程转储信息重定向到单个文件,而不是stdout文件?

标准unix进程保护策略的一部分是,在程序启动后,如果没有该程序的主动帮助,就不能再对其流进行重定向。

但是,如果你不在乎线程转储仍然在nohup.out中,并且另外在其他文件中,你可以这样做:

tail -f nohup.out > my_new_threaddump &
kill -3 $pid_target_process
kill %+

感兴趣的是获取java线程转储的相关kill-3,包括Vadzim答案:

-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log

然而,这与JRockit等不兼容(或者至少以前不兼容)——例如,请参阅http://blog.eisele.net/2011/01/running-glassfish-with-jrockit.html