
アクティブユーザーが利用可能なメモリを公平に共有する必要があるマルチユーザーシステムがあります。
合計メモリ消費量が最も高いユーザープロセスを終了するようにLinuxを設定できますか?
これは、システムメモリが不足した場合に発生します。私の考えでは、このユーザーの最大のプロセスを終了する必要があると思います。
ユーザー数が多様で、ほとんどのユーザーが作業しないとメモリが無駄になるため、ユーザーにメモリ制限を設定したくありません。最大のプロセスを終了することは可能ですが、ユーザーごとに実行する必要があります。そうしないと、あるユーザーが複数の小さなプロセスを作成して、他のユーザーの中規模プロセスが終了する可能性があります。
答え1
以下のコマンドは、ボックス内で最も多くのメモリを使用するプロセスを終了します。これはあなたが探しているものですか、それとも最も多くのメモリを使用するユーザープロセスであるべきですか(これはメモリ不足の最大の原因と原因ではないかもしれません)。
#!/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として実行すると、各ユーザーが使用したメモリの合計量がわかります。使用されたメモリごとにソートされた配列に配置し、上記のpsコマンドに-uを追加すると、そのユーザーの最悪の犯罪者を殺すことができます。