我正在尝试使用系统基础设施当内存使用量达到某个值时终止我的内存泄漏服务。使用的配置文件是这样的:
[Unit]
Description="Start memory gobbler"
After=network.target
MemoryAccounting=true
MemoryHigh=1024K
MemoryMax=4096K
[Service]
ExecStart=/data/memgoble 8388600
systemd
版本是237。但是,无论我在MemoryMax
内核中设置什么,通常当其内存消耗几乎达到整个物理RAM时,内核都会自行终止该进程。我在没有交换的嵌入式系统上运行它。
有人发现配置中有明显错误吗?也许我还缺少一些其他设置。
答案1
您的配置参数位于错误的部分。
如果您查看日志,您应该会看到:
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