systemd + cgroups v2 限制agent资源消耗

在 Linux 系统中,为了确保业务服务程序能获得尽可能多的 CPU 和内存资源,同时限制 agent(如监控、指标采集、安全扫描等)对系统资源的消耗,最佳实践是使用 Linux 的 cgroups(Control Groups)机制。cgroups 是 Linux 内核提供的资源隔离和限制功能,广泛用于容器化技术(如 Docker、Kubernetes)中,也适用于裸机环境。


✅ 方案:使用 systemd + cgroups v2(现代 Linux 发行版默认)

适用于 CentOS/RHEL 8+、Ubuntu 20.04+、Debian 11+ 等支持 cgroups v2 的系统。

步骤 1:确认系统使用的是 cgroups v2

复制代码
mount | grep cgroup

如果看到 cgroup2 挂载点(通常是 /sys/fs/cgroup),说明是 cgroups v2。


步骤 2:为每个 agent 创建独立的 systemd service(如果尚未创建)

假设你的 agent 是 my-agent,可创建:

复制代码
# /etc/systemd/system/my-agent.service
[Unit]
Description=My Monitoring Agent
After=network.target

[Service]
ExecStart=/usr/local/bin/my-agent
Restart=always
User=agentuser
# 关键:限制资源
CPUQuota=10%          # 最多使用 10% 的 CPU(单核为 100%,4核则 10% = 0.4 核)
MemoryMax=200M        # 最大内存 200MB(硬限制)
MemoryHigh=150M       # 软限制,超过后可能被回收但不 kill
Nice=19               # 降低调度优先级(-20~19,19 最低)
IOSchedulingClass=3   # idle I/O 优先级
IOSchedulingPriority=7

[Install]
WantedBy=multi-user.target

说明

  • CPUQuota=10%:限制 CPU 使用率,例如 4 核机器最多用 0.4 核。
  • MemoryMax:硬限制,超限会被 OOM kill。
  • MemoryHigh:软限制,系统内存紧张时优先回收。
  • Nice=19:让出 CPU 调度优先级给业务进程。
  • IOSchedulingClass=3:I/O 优先级设为 idle,避免影响磁盘性能。

步骤 3:重载并启用服务

复制代码
systemctl daemon-reload
systemctl enable --now my-agent

步骤 4:验证资源限制是否生效

复制代码
# 查看 cgroup 信息
systemctl show my-agent.service | grep -E "CPU|Memory"

# 实时监控
systemd-cgtop

或直接查看:

复制代码
cat /sys/fs/cgroup/system.slice/my-agent.service/cpu.max
cat /sys/fs/cgroup/system.slice/my-agent.service/memory.max

🔧 补充建议

1. 限制所有 agent 到一个统一 slice(可选)

如果有多类 agent(监控、日志、安全等),可统一归入 agent.slice

复制代码
# 在 service 文件中添加
Slice=agent.slice

然后全局限制整个 slice:

复制代码
# 创建 /etc/systemd/system/agent.slice
[Unit]
Description=Agent Slice for Resource Limitation

[Slice]
CPUQuota=15%
MemoryMax=500M

这样便于统一管理。


2. 避免 agent 在业务高峰期运行

对于非实时任务(如安全扫描),可配合 cronsystemd timer 在业务低峰期执行,并在脚本中临时提升限制(或保持低优先级)。


3. 监控业务进程资源使用

确保业务服务没有被限制,必要时可为其设置高优先级:

复制代码
Nice=-10
CPUWeight=1000  # cgroups v2 中权重(默认 100,值越大优先级越高)

⚠️ 注意事项

  • 不要完全禁用 agent:监控和安全是保障业务稳定的基础。
  • 测试限制参数:过严可能导致 agent 功能异常(如无法上报指标)。
  • 内存限制单位 :支持 K/M/G,如 200M1G
  • 旧系统(cgroups v1) :可用 cgcreate + cgexec,但推荐升级或使用 systemd 方式兼容。

✅ 总结:最佳实施方案

目标 措施
限制 CPU CPUQuota=10% + Nice=19
限制内存 MemoryMax=200M + MemoryHigh=150M
降低 I/O 影响 IOSchedulingClass=3
统一管理 使用 Slice=agent.slice
优先保障业务 业务进程不设限,甚至提高权重

通过 systemd + cgroups v2 的方式,无需额外安装工具,配置清晰、可持久化、易于维护,是当前 Linux 生产环境的最佳实践。

相关推荐
竹之却8 分钟前
Ubuntu 系统安装 Ollama 教程
linux·运维·ubuntu·ollama
珠海西格9 分钟前
4 月 1 日起执行分布式光伏监控新规,直接影响从业者与项目收益
大数据·运维·服务器·分布式·能源
Leinwin8 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382508 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇8 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7599 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣9 小时前
智能体选型实战指南
运维·人工智能
yy55279 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ10 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔12 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络