最新实践:使用systemd限制进程资源使用

606 字
3 分钟
最新实践:使用systemd限制进程资源使用

参数类型#

CPU 资源限制#

参数说明示例
CPUQuota=限制 CPU 总占用百分比(相对整个系统)CPUQuota=20%(最多 20% CPU 时间)
CPUQuotaPeriodSec=限制周期,默认 100ms,可配合上面微调调度平滑度CPUQuotaPeriodSec=1s
CPUShares=设置 CPU 权重(默认 1024),相对优先级CPUShares=512
CPUWeight=cgroup v2 新参数(替代 CPUShares),范围 1–10000CPUWeight=200
AllowedCPUs=限定可使用的 CPU 核心(cgroup v2)AllowedCPUs=0,2,4AllowedCPUs=0-3
Nice=设置进程的 nice 优先级(-20~19)Nice=10

内存限制#

参数说明示例
MemoryMax=最大可用内存上限MemoryMax=500M
MemorySwapMax=限制 swap 可用大小MemorySwapMax=0(禁止 swap)
MemoryHigh=达到此值后触发内核压力控制,但不立刻杀死进程MemoryHigh=400M
MemoryLow=优先保证该服务的最低内存MemoryLow=200M
MemoryAccounting=启用内存使用统计(建议总是开)MemoryAccounting=true

磁盘 I/O 相关#

参数说明示例
IOWeight=设置 I/O 优先级(范围 1–10000)IOWeight=500
IODeviceWeight=针对具体块设备设置权重IODeviceWeight=/dev/sda 200
IOReadBandwidthMax=限制读带宽IOReadBandwidthMax=/dev/sda 10M
IOWriteBandwidthMax=限制写带宽IOWriteBandwidthMax=/dev/sda 5M
IOReadIOPSMax= / IOWriteIOPSMax=限制 IOPS 数量IOWriteIOPSMax=/dev/nvme0n1 200

网络(需 cgroup v2 + systemd >= 250)#

参数说明示例
IPIngressMaxBytes=限制进入流量IPIngressMaxBytes=10M
IPEgressMaxBytes=限制发出流量IPEgressMaxBytes=5M
IPAccounting=启用网络流量统计IPAccounting=true

进程与文件句柄数#

参数说明示例
TasksMax=限制该服务下最多可创建多少个线程/进程TasksMax=100
LimitNOFILE=限制最大文件描述符数LimitNOFILE=4096
LimitNPROC=限制用户最大进程数LimitNPROC=128
LimitCORE=限制 core dump 大小LimitCORE=0(禁用)

自动重启与故障策略(辅助控制)#

参数说明示例
Restart=服务崩溃后是否自动重启Restart=on-failure
RestartSec=重启前等待时间RestartSec=5s
StartLimitBurst= / StartLimitIntervalSec=控制过多重启时的熔断机制StartLimitBurst=3StartLimitIntervalSec=60s

使用#

打开 service 文件临时覆盖文件#

Terminal window
systemctl edit ghost

添加规则#

Terminal window
### Editing /etc/systemd/system/ghost.service.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file
[Service]
CPUQuota=20%
### Edits below this comment will be discarded

在空行中增加的规则将被注入到 service 文件中

使规则生效#

  1. 重载配置
Terminal window
systemctl daemon-reload
  1. 重新启动应用
Terminal window
systemctl restart application

启用统计信息#

配置变量#

Terminal window
[Service]
CPUAccounting=true
MemoryAccounting=true
IOAccounting=true
IPAccounting=true

查看#

Terminal window
systemctl status ghost
systemd-cgtop
systemd-cgls

使用 systemd-run#

systemd-run 是最新实践,可以将进程以 systemd 临时服务单元的形式启动,cgroups 中的所有资源限制参数都可以通过这条命令进行应用

例如:

Terminal window
systemd-run --user -p CPUQuota=20% --scope ./hard_script.sh

其中:

  • --user: 后台运行进程
  • --scope: 让该进程在运行时不生成 systemd 临时服务文件
  • -p: 指定要控制的资源参数。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
最新实践:使用systemd限制进程资源使用
https://white-festa.net/posts/systemd_resource_limitation/使用systemd限制进程资源使用/
作者
FreelyTomorrow
发布于
2025-10-11
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-10-11,距今已过 242 天

部分内容可能已过时

相关文章 智能推荐
1
systemd-oomd 在 cgroup v2 下的触发机制与服务级 OOM 控制实践
Linux 本文深入解析 systemd-oomd 的工作原理,说明其如何基于 PSI 与 cgroup v2 监控内存压力,并与传统内核 OOM 机制进行对比。通过 memory.high、slice 配置与服务示例,演示如何在生产环境中实现更精细的 OOM 控制。
2
磁盘IO、IO指标分析及IO调度器
Linux 通过iostat、sar命令进行磁盘IO性能分析、调整IO调度器进行IO优化的方法
3
从现象到根因:跨多层级定位运维场景中的性能问题
运维排错 在 Kubernetes 运维中,有时会遇到节点网络和存储性能突然升高的情况,这篇文章展示了如何通过从网络带宽监控入手,层层递进,最终找出数据库持久化存储时遇到的NFS存储瓶颈。
4
Kubernetes节点压力驱逐、cgroups与Kernel OOM之间的关系
DevOps Kubernetes内存管理深度解析:当内存不足时,Pod如何被驱逐或杀死?本文从节点驱逐、cgroups限制、内核OOM三个层面,结合Logstash实例追踪cgroups路径,详解QoS与oom_score_adj如何决定Pod生死。
5
以真实世界的网络故障为例,分析如何通过HTTP response header定位故障域
DevOps 本文以澳洲头部零售网站 JB-HIFI 的真实宕机事件为样本,深度解析其 HTTP 响应头。你将看到,无需内部日志,仅凭客户端可见信息,即可完成从边缘到源站的全链路故障域推断。
随机文章 随机推荐

评论区

Profile Image of the Author
FreelyTomorrow
If you shout loud enough, you'll be the one.
公告 - 2025/12/21
本站框架已由Ghost迁移到Astro!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
70
分类
13
标签
40
总字数
128,671
运行时长
0
最后活动
0 天前

目录