幻影进程终止

幻影进程终止

我有一个在 CentOS 5.4 服务器上运行的 java 应用程序。

这些进程会随机地、似乎毫无原因地死亡,不是由于应用程序退出,也不是由于我终止它,而是由于某种似乎不留痕迹地终止的东西。

我记录了应用程序的所有输出,并将 stderr 和 stdout 发送到日志文件,但这些输出日志均不包含任何可以表明这些进程为何死亡的内容。

我的第一反应是使用内核级 OOM 杀手,但系统内存从来不会不足,并且通常在任何给定时间点都有 1GB 到 3GB 之间的可用内存。

我的问题是:有谁知道这可能是什么原因造成的,或者有谁知道我可以从哪里开始寻找?

谢谢。

答案1

使用以下方式启动我的 Java 应用程序

strace -tt -o strace.out <java command>

显示它正在被发送一个 SIGHUP 命令,该命令正在将其终止。事实证明,尽管我已将进程设置为在后台运行(通过附加&到命令),但该命令仍然与创建它的线程绑定。

这意味着,对于 apache 执行的命令,只要创建它们的工作线程被回收,它们就会被终止;而对于手动执行的命令,只要我注销,它们就会被终止。

nohup我通过在命令前面添加命令来解决这个问题,即

nohup java -jar /path/to/my/java.jar arguments &

答案2

进程可能会收到一些导致它们退出的信号,这可能是由于硬件故障(例如,内存故障可能导致段错误)。如果您在 syslog/dmesg 中看不到任何内容,请尝试启用核心转储。然后,您可以运行gdb它们以了解发生了什么。

相关内容