Cgroupのメモリサブシステムに動的な制限を設定できるかどうかを知りたいです。現在、私はOOMを無効にし、コントロールグループをテストするダミープロセスを持っています。メモリの制限に達すると、プロセスは(予想どおり)フリーズしますが、より大きな制限(2倍のメモリなど)を設定しようとすると、echo
コマンドは失敗し、プロセスはフリーズしたままになります。
新しい制限が設定されている別のcgroupにプロセスを移動せずに、cgroupで動的メモリ使用制限を設定するにはどうすればよいですか?
まあ、いくつかの調査の結果、cgroupの一部のパラメーターは、タスクが存在する場合は変更できないことがわかりました。
悲しいことに、メモリ制限パラメータはその1つです。
私の最後のオプションは、タスク移行機能を使用して、オンデマンドで新しいメモリ制限を持つcgroupを作成することです。
Cgroupsを使用して「動的制限」について言及するときは、探しているものをもう少し具体的にする必要があります。アプリとcgroupがcgconfig.confとともに何を行うかの例を提供するのが最善です。これは私たちにより良い絵を与えるでしょう。
Cgroupsは、cgconfig.confのmemory.limit_in_bytes
を使用してプロセスを特定のメモリ量に制限できますが、上限を設定するだけで、プロセスが下限を使用していても問題はありません。したがって、この場合にcgroupが必要かどうかはわかりません。
したがって、プログラムがメモリを動的に割り当てている場合は、メモリがどれだけオーバーコミットされているかを確認する必要がある場合もあります。 sysctl -a | grep overcommit
を使用してカーネル調整パラメータを確認し、メモリが使用可能かどうかに関係なく常にオーバーコミットするように変更します。