web-dev-qa-db-ja.com

systemdのメモリ制限が機能しない/例

systemdインフラストラクチャ を使用して、メモリ使用量が何らかの値に達したときにメモリリークサービスを強制終了しようとしています。使用される構成ファイルは次のとおりです。

[Unit]
Description="Start memory gobbler"
After=network.target
MemoryAccounting=true
MemoryHigh=1024K
MemoryMax=4096K

[Service]
ExecStart=/data/memgoble 8388600

systemdバージョンは237です。ただし、MemoryMaxで設定した値に関係なく、カーネルは独自の条件でプロセスを強制終了します。通常、メモリの消費が物理RAMのほぼ全体に達した場合です。私は組み込みシステムでこれをスワップなしで実行しています。

構成に明らかなエラーが表示されていますか?おそらく、他に欠けている設定があるかもしれません。

4
ilya1725

構成パラメーターが間違ったセクションにあります。

ログを見ると、次のことがわかります。

Unknown lvalue 'MemoryAccounting' in section 'Unit'
Unknown lvalue 'MemoryHigh' in section 'Unit'
Unknown lvalue 'MemoryMax' in section 'Unit'

https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html

資源制御構成オプションは、ユニットタイプに応じて、[Slice]、[Scope]、[Service]、[Socket]、[Mount]、または[Swap]セクションで構成されます。

したがって、あなたは欲しい:

[Unit]
Description="Start memory gobbler"
After=network.target

[Service]
ExecStart=/data/memgoble 8388600
MemoryAccounting=true
MemoryHigh=1024K
MemoryMax=4096K
9
Patrick