systemd 内存限制不起作用/示例

ily*_*725 7 memory systemd out-of-memory

当内存使用量达到某个值时,我正在尝试使用systemd 基础架构终止内存泄漏服务。使用的配置文件是这样的:

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

[Service]
ExecStart=/data/memgoble 8388600
Run Code Online (Sandbox Code Playgroud)

systemd版本是 237。但是,无论我在MemoryMax内核中设置什么,它都会按照自己的条件杀死进程,通常是当它的内存消耗几乎达到整个物理 RAM 时。我在没有交换的嵌入式系统上运行它。

有人在配置中看到明显的错误吗?也许还有一些我遗漏的其他设置。

phe*_*mer 13

您的配置参数位于错误的部分。

如果您查看日志,您应该看到:

Unknown lvalue 'MemoryAccounting' in section 'Unit'
Unknown lvalue 'MemoryHigh' in section 'Unit'
Unknown lvalue 'MemoryMax' in section 'Unit'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 是的,我认为我拥有的“systemd”版本实际上要旧得多,这就是问题所在。 (2认同)
  • PSA:这个版本不匹配问题是一个非常常见的混乱来源。请注意,像 RHEL 7 这样非常流行的发行版和基本上所有衍生版本(CentOS 7、Amazon Linux 2 等)仍然停留在版本“219”!我个人最喜欢的探索受支持指令的技巧是 grep 通过 `systemd.directives` 手册页,如下所示:`man systemd.directives | grep -A 2 -i 内存`。例如,该命令告诉我可以通过“man systemd.resource-control”了解“MemoryLimit”。 (2认同)