自动杀死进程,占用过多的内存或失速在Linux上
我想监视的过程的“制度”,并会杀死说的过程,如果:自动杀死进程,占用过多的内存或失速在Linux上
- 过程中超过一定的内存需求
- 过程不会的时间
一段时间我认为这个“系统”可以作为监控过程一样简单的回复信息从“系统”?如何做到这一点的代码示例会很有用。我当然不会反对这个问题的完全不同的解决方案。
要限制的进程的内存使用情况,检查在/etc/security/limits.conf
受监视的流程是您正在编写的流程,还是仅仅是任何流程?
如果它们是任意进程,那么可能很难监视响应性。除非这个过程已经被设置来处理和响应你可以发送的事件,否则我怀疑你能够监控它们。如果他们是你正在编写的进程,你需要添加一些你可以使用检查的消息处理。
如果您想建立一个相当全面的监测系统,请查看monit。它可以非常(非常非常非常)健谈有时,但它会做很多监控,重启服务,提醒你等。
这就是说,不要惊讶,如果你得到几十通过电子邮件发送一天,直到您习惯于配置它,并告诉它什么不会让您烦恼。
我写的运行作为一个cron作业,可定制杀有问题的进程脚本:
#!/usr/local/bin/perl
use strict;
use warnings;
use Proc::ProcessTable;
my $table = Proc::ProcessTable->new;
for my $process (@{$table->table}) {
# skip root processes
next if $process->uid == 0 or $process->gid == 0;
# skip anything other than Passenger application processes
#next unless $process->fname eq 'ruby' and $process->cmndline =~ /\bRails\b/;
# skip any using less than 1 GiB
next if $process->rss < 1_073_741_824;
# document the slaughter
(my $cmd = $process->cmndline) =~ s/\s+\z//;
print "Killing process: pid=", $process->pid, " uid=", $process->uid, " rss=", $process->rss, " fname=", $process->fname, " cmndline=", $cmd, "\n";
# try first to terminate process politely
kill 15, $process->pid;
# wait a little, then kill ruthlessly if it's still around
sleep 5;
kill 9, $process->pid;
}
http://blog.endpoint.com/2012/08/automatically-kill-process-using-too.html
Lone链接[被认为是一个不好的答案](http://*.com/faq#deletion),因为它本身毫无意义,并且目标资源不能保证在将来活着。请尽量至少包含您要链接的信息摘要。 – j0k 2012-08-31 07:51:35
或`ulimit`(shell)或`setrlimit`(C)。 – ephemient 2008-10-09 19:03:43