如何诊断JVM意外结束的原因

时间:2017-04-06 07:06:34

标签: java jvm sbt

我通过SBT进行构建过程,具有很多并行性。 有时,SBT死了,通过查看它的控制台输出,它没有说明原因。

我在JVM中创建了一个退出钩子,并且它被调用了。 所以,我放弃了JVM崩溃。

我如何诊断病因? 也许某人正在呼叫System.exit(),或者内存已经耗尽。

如果我重复构建,那么它会成功。这是一个非常确定的过程,除了我遇到的上述问题。

它失败了大约5或10%。

更新1

一个想法是使用JVM的-XX:onError选项。

我在启动JVM时已经有了这段代码(用Scala语言编写),以便诊断谁杀了JVM:

System setSecurityManager new SecurityManager() {
    override def checkPermission(perm: Permission) = {}

    override def checkPermission(perm: Permission, context: scala.Any) = {}

    override def checkExit(status: Int) = {
        super.checkExit(status)
        println("Trying to exit from: ")
        Thread.currentThread.getStackTrace.foreach { p ⇒
            println(p.toString)
        }
    }
}

但没有显示输出。

我正在使用Linux(CentOS 7)

0 个答案:

没有答案