Автоматически уничтожать процесс, который потребляет слишком много памяти или останавливается на Linux - PullRequest
5 голосов
/ 09 октября 2008

Мне нужна «система», которая отслеживает процесс и уничтожает указанный процесс, если:

  • процесс превышает некоторые требования к памяти
  • процесс не отвечает на сообщение от "системы" в какой-то период времени

Я полагаю, что эта "система" может быть чем-то таким простым, как процесс мониторинга? Пример кода того, как это можно сделать, был бы полезен. Я, конечно, не против совершенно другого решения этой проблемы.

Ответы [ 6 ]

9 голосов
/ 09 октября 2008

Что касается первого требования, вы можете захотеть изучить либо использование ulimit, либо изменение настроек ядра OOM-killer в вашей системе.

Демоны мониторинга существуют и для такого рода вещей. Бог - недавний пример.

5 голосов
/ 31 августа 2012

Я написал скрипт, который запускается как задание 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

4 голосов
/ 09 октября 2008

Чтобы ограничить использование памяти процессами, проверьте /etc/security/limits.conf

1 голос
/ 23 октября 2008

Если вы хотите настроить достаточно комплексную систему мониторинга, проверьте monit . Время от времени он может быть очень (ОЧЕНЬ, ОЧЕНЬ, ОЧЕНЬ ОЧЕНЬ болтливым), но он будет выполнять много мониторинга, перезапускать сервисы, оповещать вас и т. Д.

Тем не менее, не удивляйтесь, если вы будете получать десятки электронных писем в день, пока не привыкнете к его настройке и сообщению о том, что вас не беспокоит.

1 голос
/ 23 октября 2008

Попробуйте Process Resource Monitor для классического, простого в использовании монитора процессов. Код доступен под лицензией GPL.

Там есть несколько других скриптов мониторинга, которые могут вас заинтересовать.

0 голосов
/ 09 октября 2008

Является ли отслеживаемый процесс тем, что вы пишете, или просто каким-либо процессом?

Если они являются произвольными процессами, то может быть сложно отслеживать реакцию. Если процесс уже не настроен на обработку и реагирование на события, которые вы можете отправить, то я сомневаюсь, что вы сможете их отслеживать. Если это процессы, которые вы пишете, вам нужно добавить какую-то обработку сообщений, которую вы можете использовать для проверки.

...