web-dev-qa-db-ja.com

OOM-メモリ消費量が最も多いユーザーからプロセスを強制終了しますか?

私はマルチユーザーシステムを持っており、アクティブユーザーは利用可能なメモリのかなりの部分を取得する必要があります。

総メモリ消費量が最も多いユーザーのプロセスを強制終了するようにLinuxを設定できますか?

これは、システムのメモリが不足している場合に発生します。このユーザーのプロセスの最大のものを強制終了する必要があると思います。

ユーザーの数はさまざまであり、ほとんどのユーザーが作業していないとメモリが無駄になるため、ユーザーにメモリ制限を設定したくありません。最大のプロセスを強制終了しても機能しますが、ユーザーごとに実行する必要があります。そうしないと、1人のユーザーが多くの小さなプロセスを生成し、別のユーザーの中型プロセスが強制終了される可能性があります。

3
Gerenuk

以下は、ボックス上で最も多くのメモリを使用しているプロセスを強制終了します。それはあなたが探していたものですか、それとも最も多くのメモリを使用しているユーザーのプロセスである必要がありますか(これは最大の犯罪者ではなく、メモリ不足の理由ではない可能性があります)?

#!/bin/bash

free=`awk '/^Mem/ {print $3}' <(free -m)`

psout=`ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2`
pid=`echo $psout | cut -d " " -f 6`

if (( $free < 1 )); then

kill -9 $pid

fi;

編集:私はあなたの推論を今見ます、上記のコードを修正しようとします。

編集2:今日このプロジェクトを完了する必要はないので、正しい道を歩ませてください。以下のURLからsmem(pythonスクリプト)をダウンロードできます: https://www.selenic.com/smem/download/

-uオプションを指定してrootとして実行すると、各ユーザーが使用するメモリの合計量がわかります。それを配列で取得し、使用したmemで並べ替えてから、上記のpsコマンドに-uを追加するだけで、そのユーザーの最悪の犯罪者を殺すことができます。

2
Alex D