1 创建 Slice
单元文件
创建一个名为 flow.slice
的文件,路径为 /etc/systemd/system/
:
收起
bash
sudo mkdir -p /etc/systemd/system/flow.slice.d
sudo vi /etc/systemd/system/flow.slice.d/flow-resource.conf
1.2 编辑 Slice
单元文件
在文件中添加以下内容:
收起
ini
[Unit]
Description=Slice for flow
Before=slices.target
[Slice]
CPUQuota=300%
MemoryMax=6.5G
-
CPUQuota=75%
:限制该Slice
内的进程最多使用 75% 的 CPU 资源。 -
MemoryMax=7G
:限制该Slice
内的进程最多使用 7GB 的内存。
2.3 保存并退出文件
按 Ctrl + X
,然后按 Y
确认保存,最后按 Enter
退出 nano
编辑器。
2. 重新加载 systemd
管理器配置
修改配置文件后,需要重新加载 systemd
管理器的配置,使新的 Slice
单元生效:
收起
bash
sudo systemctl daemon-reload
sudo systemctl restart flow.slice
sudo systemctl status flow.slice
3. 将 click
用户的会话关联到新的 Slice
click
Slice
为了确保 jack
用户的所有进程都受到资源限制,需要将其会话关联到 user-jack.slice
。可以通过修改 systemd
的用户配置文件来实现。
3.1 创建或编辑 systemd
用户配置文件
systemd
创建或编辑 /etc/systemd/system/user@.service.d/override.conf
文件:
bash
sudo mkdir -p /etc/systemd/system/user@.service.d
sudo vi /etc/systemd/system/user@.service.d/override.conf
3.2 添加配置内容
在文件中添加以下内容:
收起
ini
[Service]
Slice=click.slice
这将把所有用户会话关联到 click.slice
。
3.3 配置 PAM(失败)
sudo yum install systemd-pam -y
编辑 PAM 配置文件
打开/etc/pam.d/sshd
文件:
sudo vi /etc/pam.d/sshd
在文件中找到包含 pam_systemd.so
的行(通常在 session
类型的模块中),如果没有则添加。并通过 slice=
参数指定 flow.slice
,示例如下:
报错:无效参数:slice=flow.slice
session required pam_systemd.so slice=flow.slice
这行配置表示在用户 SSH 登录建立会话时,使用 pam_systemd.so
模块,并且将会话关联到 。flow.slice
- 保存并退出文件
按Ctrl + X
,再按Y
确认保存,最后按Enter
退出编辑器。 重新加载 SSH 服务
sudo systemctl reload sshd
检查启动日志
sudo journalctl -xe | grep pam_systemd
4. 重新加载 systemd
管理器配置并重启用户会话
再次重新加载 systemd
管理器的配置:
收起
bash
sudo systemctl daemon-reload
sudo systemctl restart flow.slice
sudo systemctl status flow.slice
然后重启 flow
用户的会话,使配置生效:
收起
bash
sudo loginctl terminate-user flow
sudo systemctl status flow.slice
之后,当 flow
用户登录时,其进程将受到之前设置的资源限制。
5. 验证配置
你可以使用 systemd-cgtop
命令来查看资源使用情况,确认 jack
用户的进程是否受到了限制:
收起
bash
sudo systemd-cgtop
sudo systemd-cgls
通过以上步骤,你就可以确保 jack
用户的进程最多只能使用 75% 的 CPU 和 7GB 的内存,从而为系统保留一部分资源,避免因应用程序高负载导致系统崩溃
检查当前会话关联的 slice
loginctl show-user $(id -un) -p Sessions --value | tr ' ' '\n' | xargs -I {} systemctl status session-{}.scope
cpu 压力测试
yum install stress -y
systemd-run --slice=flow.slice --scope stress --cpu 4 --vm 1 --vm-bytes 300M --timeout 120s
/etc/pam.d/login
session required pam_systemd.so slice=click-user.slice if_user=flow
/etc/pam.d/sshd
session required pam_systemd.so slice=click-user.slice if_user=flow
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于