Systemd

systemd 記憶體限制不起作用/範例

  • November 18, 2019

當記憶體使用量達到某個值時,我正在嘗試使用systemd 基礎架構來終止我的記憶體洩漏服務。使用的配置文件是這樣的:

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

[Service]
ExecStart=/data/memgoble 8388600

systemd版本是 237。但是,無論我在MemoryMax核心中設置什麼,都會自行終止程序,通常是當它的記憶體消耗幾乎達到整個物理 RAM 時。我在沒有交換的嵌入式系統上執行它。

有人在配置中看到明顯的錯誤嗎?也許我還缺少其他一些設置。

您在錯誤的部分中有配置參數。

如果您查看日誌,您應該會看到:

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

引用自:https://unix.stackexchange.com/questions/449210