我如何知道 linux 是否以及为何终止我的进程?

我如何知道 linux 是否以及为何终止我的进程?

我正在开发亚马逊的 Linux 发行版之一(4.4.11-23.53.amzn1.x86_64)。 (1gb ram)在该实例上
我正在使用forever模块运行node.js。 (它确保在崩溃时重新启动 Node.js 进程)。
我的经验是:
网络服务器工作大约2-3小时,然后进程就消失了。在运行网络服务器之前,大约 70% 的内存被占用,之后大约 80% 的内存被占用。
我查看了 /var/log 中的每个文件,没有发现任何与被杀死的进程相关的内容。并且还记录了我的节点服务器的所有输出,但也没有从那里得到任何结果。
我假设 linux 杀死了我的进程,因为它耗尽了内存,但我不知道如何仔细检查。并且不确定为什么当我的 Web 应用程序内存使用量不随时间增加时内存使用量会增加。

答案1

要了解进程终止的原因,请使其父进程打印退出状态。退出状态指示程序是否由于某个信号而退出进程,并包含一个 8 位退出代码。 8 位退出代码通常为 0 表示成功,1..125 表示错误。

在 C/Perl/… 程序中,您可以查询整个退出状态。请查阅您语言库的文档。在 shell 脚本中,包括信号信息在内的退出状态被打包成一个 8 位值,信号被报告为 128+ 的值n在哪里n是信号编号。

#!/bin/sh
myprogram
ret=$?
if [ $ret -eq 0 ]; then
  echo "The program exited normally";;
elif [ $ret -gt 128 ]; then
  echo "The program died of signal $((ret-128)): $(kill -l $ret)"
else
  echo "The program failed with status $ret"
fi

如果Linux因为系统内存不足而杀死你的程序,这会记录在系统日志中,特别是内核日志中,可以用命令显示,dmesg并且通常记录在下面的文件中/var/log(我不知道哪个)亚马逊发行版使用的文件名)。

认为您的进程内存不足并因此被终止。检查发生了什么。最合理的解释是程序有错误并崩溃了。

相关内容