3

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

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

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

1)java进程在什么情况下会突然结束?

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

4

3 回答 3

3

1)java进程在什么情况下会突然结束?

当它自行退出时,但我猜你排除了这一点,或者当它被 SIGKILL 杀死时。如果您在 Linux 上,这可能是 oom 杀手。你看过系统消息日志吗?

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

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

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

不,但根据您使用的 Unix 变体,这可能很容易添加。在您的示例中,您可以使用打印进程退出状态echo $?

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

于 2012-04-21T15:03:33.550 回答
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

也许,退出代码可能会揭示一些东西。

于 2012-04-21T15:15:28.800 回答
0

我会将它作为YAJSW的守护进程运行,因为它允许多种方式来监控内存等,具有重新启动选项,并且您还可以启用包装进程的日志,以便在出现问题时获得更多信息。

于 2012-04-21T16:25:47.083 回答