【问题标题】:How to redirect the "kill -3 <jvm pid>" stdout to a file singly in linux and unix?如何在 linux 和 unix 中将“kill -3 <jvm pid>”标准输出重定向到一个文件?
【发布时间】:2012-02-12 12:03:08
【问题描述】:

我在 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 不适合。

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

【问题讨论】:

    标签: java c++ c linux jvm


    【解决方案1】:

    这是标准 unix 进程保护策略的一部分,即在程序启动后,如果没有该程序的积极帮助,就无法对其流进行更多重定向。

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

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

    【讨论】:

    • 最后一个startend后台作业。查看man bash 搜索jobspec
    【解决方案2】:

    感兴趣的是相关的kill -3 to get java thread dump,包括 Vadzim 的回答:

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

    但是,这与 JRockit 等不兼容(或至少以前不兼容) - 例如。见http://blog.eisele.net/2011/01/running-glassfish-with-jrockit.html

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多