
8GB のメモリを搭載した Linux マシンで複数の子プロセスを起動する長時間実行スクリプトがあります。数時間実行すると、メモリの 90% 近くを占有し、ディスク スワップを開始すると SSH などの他のサービスが応答しなくなります。
各プロセスに特定のメモリ制限を個別に設定せずに、スクリプトとすべての子プロセスの全体的なメモリ使用量をプログラムで制限する最適な方法は何ですか? 子プロセスによって使用するメモリの量が大きく異なる可能性があるため、固定しきい値を設定するのは非常に非効率的です。
理想的には、単に「メモリの最大 75% のみを使用する」と指定し、必要に応じてシステムがそれを子プロセスに分割できるようにして、いつでもマシンに SSH で接続できるようにしたいです。最初に、sshd を最高優先度に自動的に再設定する cron ジョブを設定しようとしましたが、効果がなく、定期的に SSH で接続できないか、SSH プロンプトが使用できないほど遅くなります。
答え1
プロセスを専用ユーザーとして実行し、次のように設定します。cグループ:
/etc/cgconfig.conf
:
group limitedram {
memory {
memory.limit_in_bytes = 6442450944;
}
}
そして/etc/cgrules.conf
:
serviceuser memory limitedram/
これにより、メモリ使用量がserviceuser
6 GB に制限されます。