Kit*_*nde 34 linux process logs kill monitoring
有什么方法可以检查内核杀死了我的哪些进程?有时我登录到我的服务器,发现应该运行一整夜的东西在 8 小时后停止了,我不确定是应用程序在做还是内核在做。
Gil*_*il' 30
如果内核杀死了一个进程(因为系统内存不足),就会有内核日志消息。签入/var/log/kern.log
(在 Debian/Ubuntu 上,其他发行版可能会将内核日志发送到不同的文件,但通常/var/log
在 Linux 下)。
请注意,如果触发了 OOM-killer(内存不足杀手),则表示您没有足够的虚拟内存。添加更多交换(或可能更多 RAM)。
一些进程崩溃也记录在内核日志中(例如分段错误)。
如果进程是从 cron 启动的,您应该收到一封包含错误消息的邮件。如果进程是从终端中的 shell 启动的,请检查该终端中的错误。运行该进程screen
以在早上再次查看终端。如果 OOM-killer 触发,这可能无济于事,因为它也可能杀死了 cron 或 screen 进程;但是如果你遇到了 OOM 杀手,那就是你需要解决的问题。
Mik*_*kel 12
流程会计可以在这里提供帮助。
简单来说:
apt-get install acct
Run Code Online (Sandbox Code Playgroud)
然后尝试以下命令:
lastcomm
sa
Run Code Online (Sandbox Code Playgroud)
或在 Ubuntu 上:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
Run Code Online (Sandbox Code Playgroud)
看:
更新
奇怪的是,该pacct
文件有关于退出状态的信息,但似乎既没有lastcomm
也sa
没有打印出来。
因此,据我所知,您必须编写自己的 C 程序才能访问这些信息。
更新 2
这是一个打印退出代码的版本。
最后两个字段是“S”表示已发出信号,“E”表示退出,后跟信号编号或退出状态。
因此,在您的情况下,您可能正在寻找“S 15”,这意味着它有一个 SIGTERM。
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15
Run Code Online (Sandbox Code Playgroud)
与“E 0”相比,这意味着进程退出没有错误。
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
Run Code Online (Sandbox Code Playgroud)
只进行了最低限度的测试。