在实际运维和开发中,我们经常需要对 Ubuntu 系统中的服务进行资源限制,以防止某个服务占用过多 CPU、内存或 I/O 资源,从而影响系统整体稳定性。本文将手把手教你如何使用 systemd 和 cgroup 技术对 Ubuntu 服务进行资源限制配置,即使你是 Linux 小白也能轻松上手。

为什么需要限制服务资源?
当一个服务(如 Web 服务器、数据库或自定义后台程序)出现异常或负载过高时,可能会耗尽系统资源,导致其他关键服务无法正常运行,甚至造成系统崩溃。通过合理配置 Ubuntu服务资源限制,我们可以:
防止单个服务“吃光”内存或 CPU 保障系统关键进程的稳定运行 提升整体系统可靠性与安全性 为多租户环境提供公平的资源分配前置知识:systemd 与 cgroup
systemd 是现代 Linux 发行版(包括 Ubuntu)默认的初始化系统和服务管理器。它不仅用于启动/停止服务,还集成了对 cgroup(Control Groups)的支持,而 cgroup 是 Linux 内核提供的资源控制机制。
从 Ubuntu 16.04 开始,systemd 默认使用 cgroup v1;Ubuntu 22.04 及更高版本默认使用 cgroup v2。本文以主流的 systemd + cgroup v1/v2 兼容方式讲解。
步骤一:查看当前服务状态
假设我们要限制名为
myapp.service的服务。首先确认该服务是否存在并正在运行:
systemd 推荐使用 sudo systemctl status myapp.service步骤二:创建或编辑服务的 override 配置
systemctl edit
命令来安全地覆盖默认配置,而不是直接修改原始 .service 文件。
这会打开一个空的编辑器窗口。我们将在此添加资源限制参数。 在打开的编辑器中,输入以下内容(根据你的需求调整数值): 保存并退出编辑器(在 nano 中按 修改完成后,必须重新加载 systemd 配置并重启服务才能生效: 使用以下命令查看服务的实际资源限制: 你也可以通过 如果你有多个相关服务(如 web + cache + db),可以将它们放入同一个 slice(切片)中统一管理: 然后在每个服务的 override 中指定使用该 slice: 通过本文,你已经掌握了如何在 Ubuntu 系统中使用 systemd 对服务进行 systemd资源控制 和 cgroup配置,有效实现 Linux性能优化。这些技巧不仅能提升系统稳定性,还能帮助你在生产环境中更精细地管理资源。 记住:合理的资源限制不是限制性能,而是保障整体服务质量。建议在测试环境中充分验证后再部署到生产环境。 关键词回顾:Ubuntu服务资源限制、systemd资源控制、cgroup配置、Linux性能优化。sudo systemctl edit myapp.service步骤三:配置常见资源限制
[Service]# 限制最大内存使用量为 512MBMemoryMax=512M# 限制最大 CPU 使用率为 50%(即半核)CPUQuota=50%# 限制可打开的最大文件描述符数量LimitNOFILE=4096# 限制最大进程数TasksMax=100Ctrl+O
回车,再按 Ctrl+X
)。常用资源限制参数说明:
MemoryMax
:硬性内存上限(单位:K/M/G) MemoryHigh
:软性内存上限(超过后会被回收,但不强制杀死) CPUQuota
:CPU 使用百分比(100% = 1 核) IOWeight
:I/O 权重(仅 cgroup v2,范围 1-10000) LimitNOFILE
:最大文件句柄数 TasksMax
:最大线程/进程数步骤四:重新加载配置并重启服务
sudo systemctl daemon-reloadsudo systemctl restart myapp.service步骤五:验证资源限制是否生效
systemctl show myapp.service --property=MemoryMax,CPUQuota,TasksMaxsystemd-cgtop
实时监控各服务的资源使用情况:sudo systemd-cgtop高级技巧:为多个服务统一设置资源组
# 创建 /etc/systemd/system/mygroup.slice[Unit]Description=My Application Group Slice[Slice]MemoryMax=2GCPUQuota=200%[Service]Slice=mygroup.slice总结
