有什么方法可以检查内核杀死了哪些进程?有时,我登录到服务器后发现应该整夜运行的东西在8个小时后才停止运行,而且我不确定是应用程序在运行还是内核在运行。
有什么方法可以检查内核杀死了哪些进程?有时,我登录到服务器后发现应该整夜运行的东西在8个小时后才停止运行,而且我不确定是应用程序在运行还是内核在运行。
Answers:
如果内核杀死了一个进程(因为系统内存不足),将出现内核日志消息。签入/var/log/kern.log
(在Debian / Ubuntu上,其他发行版可能会将内核日志发送到其他文件,但通常是/var/log
在Linux下)。
请注意,如果触发了OOM杀手(内存不足杀手),则意味着您没有足够的虚拟内存。添加更多的交换(或者可能更多的RAM)。
某些进程崩溃也记录在内核日志中(例如,分段错误)。
如果这些进程是从cron开始的,则您应该收到一封包含错误消息的邮件。如果进程是从终端中的外壳程序启动的,请检查该终端中的错误。screen
早晨运行该过程以再次查看终端。如果OOM杀手触发了,这可能无济于事,因为它也可能杀死了cron或screen进程。但是如果您遇到了OOM杀手,那就是您需要解决的问题。
流程会计可以在这里提供帮助。
简单来说:
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
与“ E 0”相比,表示该过程没有错误退出。
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
仅经过最低限度的测试。
sudo服务-状态全部
此命令将告诉您当前正在运行哪些服务,哪些尚未启动或停止。
/var/log/kern.log
?