5

プロセスを監視し、次の場合にそのプロセスを強制終了する「システム」が必要です。

  • プロセスが一部のメモリ要件を超えています
  • プロセスが「システム」からのメッセージに一定期間応答しない

この「システム」は、監視プロセスと同じくらい単純なものであると思いますか? これを行う方法のコード例は役に立ちます。もちろん、私はこの問題に対するまったく異なる解決策を嫌うわけではありません。

4

7 に答える 7

9

最初の要件についてはulimit、システムのカーネルOOM-killer設定を使用するか、微調整することを検討することをお勧めします。

この種の監視デーモンも存在します。 は最近の例です。

于 2008-10-09T15:29:19.713 に答える
5

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;
}

https://www.endpointdev.com/blog/2012/08/automatically-kill-process-using-too/

于 2012-08-30T23:24:55.040 に答える
4

プロセスのメモリ使用量を制限するには、/ etc / security/limits.confを確認してください

于 2008-10-09T15:28:15.703 に答える
1

従来の使いやすいプロセス モニターであるProcess Resource Monitorをお試しください。GPL の下で利用可能なコード。

他にも興味深い監視スクリプトがいくつかあります。

于 2008-10-22T22:09:38.933 に答える
1

かなり包括的な監視システムをセットアップしたい場合は、monitを調べてください。時々非常におしゃべりになることがありますが、多くの監視、サービスの再起動、警告などを行います.

とはいえ、設定に慣れるまでは 1 日に数十通の電子メールを受け取っても驚かないでください。

于 2008-10-22T22:13:42.717 に答える
0

監視対象のプロセスはあなたが書いているものですか、それとも単なるプロセスですか?

それらが任意のプロセスである場合、応答性を監視するのは難しいかもしれません。送信できるイベントを処理して応答するようにプロセスがすでに設定されていない限り、それらを監視できるとは思えません。それらが作成中のプロセスである場合は、チェックを使用できる何らかのメッセージ処理を追加する必要があります。

于 2008-10-09T15:29:30.273 に答える
0

ここに、出発点となるシェル スクリプトがあります。プロセスがメモリ制限を超えているという問題もあったため、それを行いました。実際には、CPU 使用率の特定の制限をチェックするだけですが、ウォッチ メモリやアイドル プロセスのジョブ リストに簡単に変更できます。

ファイル: pkill.sh

#!/bin/bash

if [ -z "$1" ]
  then
    maxlimit=99
else
  maxlimit=$1
fi

ps axo user,%cpu,pid,vsz,rss,uid,gid --sort %cpu,rss\
| awk -v max=$maxlimit '$6 != 0 && $7 != 0 && $2 > max'\
| awk '{print $3}'\
| while read line;\
    do\
      ps u --no-headers -p $line;\
      echo "$(date) - $(ps u --no-headers -p $line)" >> pkill.log;\
      notify-send 'Killing proccess!' $(ps -p $line -o command --no-headers | awk '{print $1}') -u normal -i dialog-warning -t 3000;\
      kill $line;\
  done;

次のように簡単に実行します。sh ./pkill.sh <limit-cpu>

または、実行し続けるには:watch -n 10 sh ./pkill.sh 90

上記の場合、10 秒ごとに実行し続け、CPU の 90% を超えるプロセスを強制終了します。

于 2021-04-06T14:21:23.603 に答える