我使用的是 Arch Linux,systemd 版本是 239。我使用 systemd.unified_cgroup_hierarchy=1 内核参数启动系统。
我制作了两个单元文件,limit.slice 和 malloc.service。
limit.slice 是
[Unit]
Description=limit memory slice.
[Slice]
MemoryAccounting=yes
MemoryMax=100M
和 malloc.service 是
[Unit]
Description=memory consuming process
[Service]
ExecStart=/home/example/malloc_program
Slice=limit.slice
malloc_program 只是不断调用 malloc() 来消耗内存。
我将这些文件放入 /home/example/.config/systemd/user/ 并运行systemctl --user start malloc.service
。 Service 的 CGroup 低于limit.slice
预期。
CGroup: /user.slice/user-1000.slice/[email protected]/limit.slice/malloc.service
但是,即使使用的内存超过 100 MB,该进程仍会继续运行。
我不明白为什么内存限制在用户实例中不起作用......
答案1
尝试在 .slice 文件中设置 malloc 服务:
[Slice]
MemoryAccounting=true
MemoryLimit=100M
MemoryMax=100M
MemoryHigh=50M