【问题标题】:No threaddump generated on kill -3kill -3 没有生成线程转储
【发布时间】:2012-03-05 15:56:21
【问题描述】:

是否有可能 kill -3 / quit PID 不打印任何内容,即空线程转储?我们从一位支持工程师那里听到了一个故事,想知道是否有专家可以进行验证。

这是在 RHEL 5 上的 Java 6_26 上

【问题讨论】:

    标签: java jvm thread-dump


    【解决方案1】:

    我只在服务器重定向到标准输出(如 JBoss)时看到这种情况,并且标准输出已被重定向到 /dev/null,因为设置服务器的人认为所有进入标准输出的内容都已经进入了一个命名的日志文件。

    【讨论】:

    • 如果我们将输出重定向到命令本身的文件中会有什么不同:kill -3 PID > dump
    • 我记得,从 kill -3 重定向输出不起作用,我们不得不更改我们的启动脚本(不再重定向)
    • 有点晚了,但我发现你可以使用'jstack'来做到这一点。
    【解决方案2】:

    某些服务器上 JVM 线程转储的控制台输出被重定向到日志文件。如果是 Tomcat 服务器,它通常是 Catalina.out。

    【讨论】:

      【解决方案3】:

      我已经看到您在独立 Java 应用程序(Oracle JDK 1.6.20+,Linux)中描述的行为,但我不知道如何始终如一地重现此行为。可能是在其中一个线程中的OutOfMemoryError 之后,但我不确定了。

      我还认为我得到的不仅仅是一个空转储,而是该命令实际上冻结了,直到我在等待一段时间后按 ctrl+C 后才将我返回到 shell。无论哪种方式,我确信jstack 的行为与kill -3 的行为完全相同。当它发生时,该应用程序的状态非常糟糕,以至于它对正常的kill 没有反应,只有kill -9 在处理它。没有重定向,在正常情况下,应用程序会按应有的方式对 kill -3 做出反应。

      【讨论】:

        猜你喜欢
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 2015-01-03
        • 2023-03-27
        • 1970-01-01
        • 2017-03-07
        相关资源
        最近更新 更多