有什么方法可以检查内核杀死了哪些进程吗?有时,我登录到我的服务器,发现应该运行一整晚的东西只在8小时内停止运行,我不确定是应用程序在运行还是内核在运行。
发布于 2011-03-25 08:11:44
如果内核杀死了一个进程(因为系统内存不足),就会有一条内核日志消息。签入/var/log/kern.log (在Debian/Ubuntu上,其他发行版可能将内核日志发送到不同的文件,但通常在Linux下的/var/log下)。
请注意,如果OOM杀手(内存不足的杀手)触发,这意味着您没有足够的虚拟内存。添加更多的交换(或可能更多的RAM)。
一些进程崩溃也记录在内核日志中(例如,分段错误)。
如果进程是从cron启动的,您应该有一封带有错误消息的邮件。如果进程是从终端中的shell启动的,请检查该终端中的错误。运行screen中的进程,以便在早上再次看到终端。如果OOM杀手触发,这可能没有帮助,因为它可能也会杀死cron或屏幕进程;但是如果您遇到了OOM杀手,这就是您需要解决的问题。
发布于 2011-03-25 08:23:23
流程会计在这方面可能会有所帮助。
简单地说:
apt-get install acct然后尝试这样的命令:
lastcomm
sa或者在Ubuntu上:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct请参见:
更新
奇怪的是,pacct文件包含关于退出状态的信息,但是lastcomm和sa似乎都没有打印它。
因此,据我所见,您必须编写自己的C程序才能访问这些信息。
更新2
这是一个打印退出代码的版本。
最后两个字段是"S“表示”信号“,"E”表示“退出”,后面是信号号或退出状态。
所以在你的例子中,你可能是在找"S 15“,意思是它有一个SIGTERM。
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15与“E0”相比,这意味着进程没有错误地退出。
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0只有最低限度的测试。
发布于 2011-03-25 12:01:16
sudo服务--状态--全部
此命令将告诉您哪些服务当前正在运行,哪些服务没有启动或停止。
https://unix.stackexchange.com/questions/10077
复制相似问题