自动杀死耗费太多内存的进程或在Linux上停止

我想要一个监视进程的“系统”,并在下列情况下终止进程:

  • 过程超出了一些内存要求
  • 该过程在一段时间内不响应来自“系统”的消息

我认为这个“系统”可以像监测过程那样简单? 如何做到这一点的代码示例将是有用的。 我当然不反对这个问题的完全不同的解决scheme。

Solutions Collecting From Web of "自动杀死耗费太多内存的进程或在Linux上停止"

对于第一个要求,您可能需要考虑使用ulimit ,或者调整系统上的内核OOM杀手设置。

监控守护进程也存在这种事情。 上帝是最近的一个例子。

我写了一个作为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

要限制进程的内存使用情况,请检查/etc/security/limits.conf

如果你想建立一个相当全面的监控系统,请检查监控。 它可以非常(非常非常非常)健谈,但它会做很多监视,重新启动服务,提醒你,等等。

也就是说,如果你每天收到几十封电子邮件,直到你习惯于配置它,并告诉它什么都不会让你烦恼,那么不要感到惊讶。

尝试使用Process Resource Monitor来获得经典的,易于使用的过程监视器。 在GPL下可用的代码。

还有其他一些监控脚本,您可能也会感兴趣。

受监视的流程是您正在编写的流程,还是仅仅是任何流程?

如果他们是任意的进程,那么可能很难监控响应。 除非这个过程已经被设置来处理和回复你可以发送的事件,否则我怀疑你能够监控它们。 如果他们是你正在写的进程,你需要添加一些消息处理,你可以使用检查。