CPU + RAMを節約するために特定のプロセスのリソース使用量を制限する方法は?

CPU + RAMを節約するために特定のプロセスのリソース使用量を制限する方法は?

sshdコンピュータにメモリが不足し、時々動作を停止する開発サーバーがあります。はい、メモリが不足しているため、現在はアップグレードが実行可能なオプションではありません。私がしたいのは、マシンに「好きなようにしますが、20MBと少しのCPUを別に残してくださいsshd!」と言うことです。

では、どうすればいいですか?

答え1

以下を使用して同様の結果を得ることができます。cgroupそしてメモリリソースコントローラ

私はすべてのリソース消費タスクを制限された(CPUとRAM)に配置し、制限されないように「外部」に保存するcgroupことを考えています。sshd

(スワップファイルの形式でも、より多くのスワップを追加するのが良い選択かもしれません。)

答え2

ああ、しかしcgroupは簡単です:) libcgroupパッケージをインストールしてください。 /etc/cgconfig.confを生成します。

mount {
    cpu     = /cgroup/cpu_and_mem;
    cpuacct = /cgroup/cpu_and_mem;
    memory  = /cgroup/cpu_and_mem;
}

group sshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

group nosshd {
        cpu {
                cpu.shares="500";
        }
        cpuacct {
                cpuacct.usage="0";
        }
        memory {
                memory.limit_in_bytes="1G";
        }
}

cgconfig階層、cgroupを作成し、制限を設定するプロセスを開始します。成功すると、CPU の 50% と使用可能メモリーの 1G が割り当てられた 2 つの cgroup が生成されます (実際に使用可能なメモリー量がどれくらいかはわかりません。 この例では 2G と仮定)。これで、ルートグループのすべてのタスク(つまり、システムで実行されているすべてのプロセス)をnosshd cgroupに移動するだけです。

cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks

その後、プロセスのPIDを取得してsshdsshd作業ファイルに移動します。

cgroup]# echo $PID >> sshd/tasks

お父さん、もう終わりました。今sshdのCPUは常に50%で、メモリは1Gなので安心してください。

答え3

reniceより高い優先順位を取得したり、sshd会計を確認したりするために使用されます。 (acct) - >これでユーザーのリソースを設定できるので、sでsshdを実行してください。

答え4

アプリケーションリソースの使用に関する問題のより一般的な解決策は、コンテナでアプリケーションを実行することです。ルーストアバウト。それではあなたはできます。走るcgroupに似たCPUとメモリ使用量の制限があるコンテナ。

docker run -c=10 -m=1g my-container

関連情報