私は次の考えを共有し、これが通常よりも多くのメモリを消費するようにsystemctlサービスを制限する正しい方法であることを理解したいと思います。
たとえば、特定のサービスが2G以上のメモリを使用できないように制限しているとします。
もしそうなら、私の提案は次のことです:
[Service]
MemoryAccounting=yes
MemoryCurrent=2097152
MemoryLimit=2097152
今最大の質問は、上記の設定でサービスが2Gに達するとどうなりますか?
いくつかのオプションがあります
サービスが失敗する
サービスが再起動されます
しかし、もちろん、メモリ消費が2G制限に達すると、サービスが再起動されることを好みます。
引用する -
https://superuser.com/questions/1761261/redhat-machine-rsyslogd-eating-up-10-gb
答え1
SystemdはCgroupを使用してリソース制限を実装するため、サービスが2 GB以上のメモリを使用しようとすると、Cgroupはそれを終了します。再起動するかどうかを確認するには、またはRestart=on-failure
(Restart=on-abort
かもしれませんStartLimitIntervalSec
)を追加します。
最大メモリ =バイト...これは
memory.max
制御グループ属性を制御します。
この回答を書くと、systemdはすでに252であり、廃止されたためMemoryLimit
(cgroup v1オプション)、ドキュメントページには表示されなくなります。
~からcgroup v2 ドキュメント存在するmemory.max
:
cgroupのメモリ使用量がこの制限に達して減らせない場合、cgroupはOOM Killerを呼び出します。