systemd 资源限制 ¶
Overview ¶
Systemd 服务可以在配置文件或者 systemd-run 临时运行时通过 -p 参数限定服务可以使用的最大资源,如CPU/Memory等
- CpuQuota 最大核心数
- CpuWeight 权重,越大时分给更高的调度优先级(主要影响负载较高时)
- MemoryMax 最大内存
以下时AI生成内容
可以使用 systemd-run 或通过编写 systemd 单元文件来对服务进行资源限制。以下是两种方法:
1. 使用 systemd-run(临时运行) ¶
CPU 限制 ¶
# CPU 配额(单核的百分比)
systemd-run --scope -p CPUQuota=50% command
# 限制 CPU 核数
systemd-run --scope -p CPUQuota=100% -p CPUWeight=100 command
内存限制 ¶
# 限制内存使用
systemd-run --scope -p MemoryMax=512M -p MemorySwapMax=1G command
# 仅限制内存,不限制交换空间
systemd-run --scope -p MemoryMax=1G command
综合示例 ¶
# 同时限制 CPU 和内存
systemd-run --scope \
-p CPUQuota=75% \
-p MemoryMax=1G \
-p MemorySwapMax=2G \
/path/to/command
2. 创建永久 systemd 服务文件 ¶
创建 /etc/systemd/system/my-service.service:
[Unit]
Description=My Limited Service
[Service]
Type=simple
ExecStart=/path/to/command
# CPU 限制
CPUQuota=50%
CPUWeight=50
AllowedCPUs=0-1 # 仅允许使用 CPU 0 和 1
# 内存限制
MemoryMax=512M
MemorySwapMax=1G
MemoryHigh=400M # 软限制,超过会减速
# IO 限制
IOWeight=50
IOReadBandwidthMax=/dev/sda 1M
IOWriteBandwidthMax=/dev/sda 1M
# 进程数限制
TasksMax=100
# 网络限制(需要 systemd >= 240)
# IPAccounting=yes
# IPAddressAllow=192.168.1.0/24
# IPAddressDeny=any
[Install]
WantedBy=multi-user.target
3. 常用资源限制参数 ¶
CPU 相关 ¶
CPUQuota=50%- CPU 时间配额CPUWeight=100- CPU 权重(1-10000)AllowedCPUs=0,1- 允许使用的 CPU 核心StartupCPUWeight=100- 启动时的 CPU 权重
内存相关 ¶
MemoryMax=1G- 最大内存(硬限制)MemoryHigh=800M- 内存高水位线(软限制)MemorySwapMax=2G- 最大交换空间MemoryLimit=1G- 旧版参数(兼容性)
IO 相关 ¶
IOWeight=100- IO 权重IOReadBandwidthMax=- 读带宽限制IOWriteBandwidthMax=- 写带宽限制BlockIOWeight=- 块设备 IO 权重
进程相关 ¶
TasksMax=100- 最大进程数LimitNPROC=- 最大进程数(传统方式)LimitNOFILE=- 最大文件描述符数
4. 应用和管理 ¶
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start my-service
# 查看资源使用
sudo systemctl status my-service
systemd-cgtop # 查看控制组资源使用
# 动态调整运行中的服务
sudo systemctl set-property my-service CPUQuota=75%
5. 验证限制 ¶
# 查看服务的 cgroup 设置
systemd-cgls /system.slice/my-service.service
# 查看具体限制
cat /sys/fs/cgroup/system.slice/my-service.service/memory.max
cat /sys/fs/cgroup/system.slice/my-service.service/cpu.max
注意事项 ¶
- 权限要求:大多数资源限制需要 root 权限
- 单位表示:可以使用 K、M、G、T 后缀(如 512M、2G)
- 百分比表示:CPUQuota 使用百分比,100% 表示一个完整 CPU 核心
- 动态修改:部分参数可以在服务运行时动态修改
- 版本兼容:某些功能需要较新的 systemd 版本(≥ 207)
通过合理配置这些参数,可以有效控制系统服务的资源使用,防止单个服务占用过多系统资源。
评论
请登录后发表评论。
暂无评论。成为第一个评论者!