私はソフトウェア開発者であり、不安定なソフトウェアに多くさらされています。私は最近、システムが停止して応答しなくなるまでメモリが漏れる小さなゲームを作成しました。一般的にREISUBは役に立ちますが、時には役に立たないので強制停電をしなければならない場合もあります。
その後、他のプログラムでこれが再び発生したため、一定期間PIDごとに特定の値を超えると、メモリ使用量を監視するスクリプトを作成することでこれを簡単に防ぐことができると思いました。それからSIGKILLを受け取ります。そしてすぐに降りてください。
どんなアイデアがありますか?ありがとう
答え1
earlyoom
ここにリストされている選択肢の1つをインストールして有効にします。
https://github.com/hakavlad/nohang
Fedoraは現在デフォルトでEarlyoomを使用しています。
LinuxカーネルのOOM処理は非常に悪く、ユーザースペースユーティリティ/ヘルパーなしでは正しく機能しないことがよくあります。
man limits.conf
cgroupを使用してアプリケーションRAMの使用量を制限することもできます。
答え2
簡単なアイデア:メモリが指定された値を超えていることを確認し、しばらくしてからもう一度確認してください。攻撃して3回連続攻撃すると死亡します。知っておくべきこと:プロセスのPID
#!/bin/bash
pid=$1
strike=0
#as long as process exists
while (kill -0 $pid 2>/dev/null) ; do
#get RAM usage in kB
ram=$(pmap -x $pid | tail -1 | awk '{print $3}')
#compare to threshold, 1,000,000kB
if [[ 1000000 -lt $ram ]] ; then
strike=$((strike+1))
if [[ strike -eq 3 ]] ; then
kill $pid
exit
fi
else
strike=0
fi
sleep 5
done