我可以为用户设置内存限制,如下所示:
systemctl set-property user-UID.slice MemoryHigh=24G
Run Code Online (Sandbox Code Playgroud)
有没有办法让这适用于所有用户?我希望每个用户都获得 24G,而不是所有用户进程总共获得 24G(我认为这是user.slice直接设置的结果)。
似乎没有官方支持的方法来做到这一点。(这是不正确的。见底部) 官方不鼓励的一种方式(因为它操纵cgroup)如下:
将以下文件制作为 /etc/systemd/system/user@.service.d/set-memhigh.conf
[Service]
Type=simple
ExecStartPost=+/root/set-memoryhigh.sh %i
Run Code Online (Sandbox Code Playgroud)
然后将以下文件设为“/root/set-memoryhigh.sh”
#!/bin/bash
exec >>/var/tmp/log.txt 2>&1 # for logging
set -x # for logging
for d in /sys/fs/cgroup /sys/fs/cgroup/user.slice /sys/fs/cgroup/user.slice/user-$1.slice; do
echo "+memory" >>${d}/cgroup.subtree_control
done
/bin/echo "24G" >> /sys/fs/cgroup/user.slice/user-$1.slice/memory.high
Run Code Online (Sandbox Code Playgroud)
您可以通过运行查看它是否有效
cat /sys/fs/cgroup/user.slice/user-${UID}.slice/memory.high
Run Code Online (Sandbox Code Playgroud)
如果“/sys/fs/cgroup/user.slice”不存在,则未启用统一的 cgroup 层次结构。我们必须将其启用为https://unix.stackexchange.com/a/452728/297666
虽然它有效,但我不确定你是否喜欢这个......
7 月 25 日添加的注释:/etc/systemd/system/user-1000.slice为每个用户制作以下文件(用用户的 UID 替换 1000)会对该用户施加内存限制。我验证它systemd 237与systemd在Ubuntu 18.04和Debian strecth 237从拉伸backports中安装:
[Slice]
Slice=user.slice
MemoryHigh=24G
Run Code Online (Sandbox Code Playgroud)
不便之处在于我们必须为每个用户制作上述文件。使用 systemd 239,我们可以制作上述文件,/etc/systemd/system/user-.slice.d/memory.conf并对每个用户施加内存限制。但是systemd 239 中存在一个错误 (此错误已在 240 中更正)并且无法按预期工作。要解决此错误,请将以下文件制作为user-0.slice并运行systemctl enable user-0.slice. 我们并没有要为每个用户提供以下文件。
[Unit]
Before=systemd-logind.service
[Slice]
Slice=user.slice
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7428 次 |
| 最近记录: |