多すぎるメモリまたはCPUを使用するタイムアウトプロセス

多すぎるメモリまたはCPUを使用するタイムアウトプロセス

メモリやCPUを多用するLinux/Unixサーバで、一種のタイムアウトプログラムを作成するのはどれほど難しいですか?このために何をすべきですか?

これは頻繁に起こります。多くのリソースを使用してタスクを実行している場合は、リソース全体を望むことがあります。しかし、3日以上実行状態にしておけば本当に言葉にならないことです。やりたいことを1時間以内に完了できない場合は、プライベートサーバーを使用する必要があります。何百人もの人々が使用するサーバーですが、スクリーンショットに示すように、リソースが制限されている古いサーバーです。 1時間以内にこれを防ぐ方法を考えることができますか?この場合、その人はサーバーの99.9%を使用しています。

ここに画像の説明を入力してください。

ベストアンサー1

これはどうですか?少し調整が必要な場合がありますが、それを把握するための出発点として使用できると確信しています。 cronで実行できます。何らかの理由で動作しない場合は、ウェブサイトのフォーマットエラーの可能性があります。

#!/bin/bash                                                                                                                                                                                               

# 内部フィールド区切り記号                                                                                                                                                                                
IFS="                                                                                                                                                                                                     


#set
minUid = 1000#終了する最小UID(保護サービスとルート)
maxCpu=25 # $maxTime 内でプロセスが消費できる最大 %CPU
maxTime=3600 #プロセスが実行できる最大時間(秒)

#プロセスリストをロードしてフォーマットします。
psList=$(ps -eo pid,uid,pcpu,etimes,args | awk '{ print $1" "$2" "$3" "$4" "$5}' | tail -n+2)

エコを待ってください...

#各プロセスに対してこれを行います。
$psListのプロセスに対して、次の操作を行います。
        pid=$(echo $process | cut -d' ' -f1) #pid
        uid=$(echo $process | cut -d' ' -f2) #uid
        cpu=$(echo $process | cut -d' ' -f3) #cpu 使用量
        cpu=$(printf "%.0f" $cpu) # 浮動小数点数を整数に変換
        etimes=$(echo $process | cut -d' ' -f4) #pid が開始されてから経過した時間
        cmd=$(echo $process | cut -d' ' -f5) #コマンド名

        # UIDを殺すことができることを確認する
        if [ $pid -ge $minUid ];

                #時間+ CPU使用量制限を満たしていることを確認する
                if [ $etimes -ge $maxTime ] && [ $cpu -ge $maxCpu ] then {
                        #終了するプロセスを決定します。
                        echo "kill pid=$pid uid=$uid cpu=$cpu etimes=$etimes cmd=$cmd"
                        KILL -KILL $pid
                } fi
        } fi


}完全

おすすめ記事