Java - 在哪种情况下JVM会突然崩溃?

时间:2012-04-21 14:44:24

标签: java unix process jvm daemon

我正在我的ubuntu机器上运行一个守护程序java进程:

java -cp (...) &> err.log&

该过程运行一段随机时间,然后消失。 LOGs,err.log中没有任何内容,没有创建JVM崩溃文件(hs_err _ * .log),什么都没有。我的两个问题是:

1)在什么情况下java进程可以突然完成?

2)有没有办法知道这个过程发生了什么(知道PID)? UNIX是否以某种方式保存有关已完成流程的信息?

3 个答案:

答案 0 :(得分:3)

1)在什么情况下java进程可以突然完成?

当它以自己的方式退出时,我猜你已经排除了这种情况,或者当它被SIGKILL杀死时。如果你在Linux上,这可能是一个杀手锏。您是否查看了系统消息日志?

2)有没有办法知道过程发生了什么(知道PID)?

除非您配置一些跟踪工具来获取该信息,否则通常不会这样做

UNIX是否以某种方式保留有关已完成流程的信息?

不,但是根据您使用的Unix变体,可能需要添加一些简单的东西。 在您的示例中,您只需使用echo $?

打印流程退出状态

如果是265,则意味着该过程被信号9(=265-256)杀死。

答案 1 :(得分:0)

我会编写一个简单的shell脚本,在JVM终止时会以某种方式提醒我。也许发送一封包含JVM退出代码的电子邮件。

#!/bin/sh

# Launch JVM and wait...
java -cp ...

# do something with the exit code $?
# log it to a file or mail it yourself

也许,退出代码可能会显示出一些内容。

答案 2 :(得分:0)

我会用YAJSW作为守护进程运行它,因为它允许多种方式来监视内存等,有重启选项,你还可以启用包装进程登录,这样你就可以获得很多信息。一个问题。