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

当一个服务(如 Web 服务器、数据库或自定义后台程序)出现异常或负载过高时,可能会耗尽系统资源,导致其他关键服务无法正常运行,甚至造成系统崩溃。通过合理配置 Ubuntu服务资源限制,我们可以:
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 的服务。首先确认该服务是否存在并正在运行:
sudo systemctl status myapp.servicesystemd 推荐使用 systemctl edit 命令来安全地覆盖默认配置,而不是直接修改原始 .service 文件。
sudo systemctl edit myapp.service这会打开一个空的编辑器窗口。我们将在此添加资源限制参数。
在打开的编辑器中,输入以下内容(根据你的需求调整数值):
[Service]# 限制最大内存使用量为 512MBMemoryMax=512M# 限制最大 CPU 使用率为 50%(即半核)CPUQuota=50%# 限制可打开的最大文件描述符数量LimitNOFILE=4096# 限制最大进程数TasksMax=100保存并退出编辑器(在 nano 中按 Ctrl+O 回车,再按 Ctrl+X)。
MemoryMax:硬性内存上限(单位:K/M/G)MemoryHigh:软性内存上限(超过后会被回收,但不强制杀死)CPUQuota:CPU 使用百分比(100% = 1 核)IOWeight:I/O 权重(仅 cgroup v2,范围 1-10000)LimitNOFILE:最大文件句柄数TasksMax:最大线程/进程数修改完成后,必须重新加载 systemd 配置并重启服务才能生效:
sudo systemctl daemon-reloadsudo systemctl restart myapp.service使用以下命令查看服务的实际资源限制:
systemctl show myapp.service --property=MemoryMax,CPUQuota,TasksMax你也可以通过 systemd-cgtop 实时监控各服务的资源使用情况:
sudo systemd-cgtop如果你有多个相关服务(如 web + cache + db),可以将它们放入同一个 slice(切片)中统一管理:
# 创建 /etc/systemd/system/mygroup.slice[Unit]Description=My Application Group Slice[Slice]MemoryMax=2GCPUQuota=200%然后在每个服务的 override 中指定使用该 slice:
[Service]Slice=mygroup.slice通过本文,你已经掌握了如何在 Ubuntu 系统中使用 systemd 对服务进行 systemd资源控制 和 cgroup配置,有效实现 Linux性能优化。这些技巧不仅能提升系统稳定性,还能帮助你在生产环境中更精细地管理资源。
记住:合理的资源限制不是限制性能,而是保障整体服务质量。建议在测试环境中充分验证后再部署到生产环境。
关键词回顾:Ubuntu服务资源限制、systemd资源控制、cgroup配置、Linux性能优化。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122687.html