我通过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)