服务器资源动态调度配置零基础实操指南

为什么要学会动态调度服务器资源

服务器上跑的进程多了,CPU 和内存就可能被某个程序吃光,导致其他服务变慢甚至崩溃。服务器资源动态调度配置 可以让你在不重启进程的情况下,实时调整每个服务能用的资源上限。
对于零基础用户来说,最方便的工具是 systemd(几乎所有现代 Linux 都自带),通过几个命令就能搞定。

准备环境:确认你的 Linux 支持 systemd

打开终端(SSH 或直接登录),输入以下命令检查 systemd 版本:

systemctl --version

如果输出类似 systemd 219 或更高版本,说明可以使用。CentOS 7+、Ubuntu 16.04+、Debian 8+ 都内置 systemd。
另外,你需要 root 权限或 sudo 权限,因为修改系统资源需要管理员身份。

动手操作:给一个服务设置 CPU 和内存上限

我们先创建一个测试服务(比如一个一直占用 CPU 的脚本),然后给它套上“笼子”。

1. 编写测试服务单元文件

用编辑器创建 /etc/systemd/system/test-resource.service,内容如下:

[Unit]
Description=Test resource dynamic scheduling

[Service]
ExecStart=/usr/bin/bash -c "while true; do a=1; done"
CPUQuota=50%
MemoryMax=100M
MemoryHigh=80M

[Install]
WantedBy=multi-user.target
  • CPUQuota=50% 表示最多使用 1 个 CPU 核心的 50%(如果 CPU 有 4 核,就是总能力的 12.5%)。
  • MemoryMax=100M 是硬限制,超过此值进程会被 OOM Kill。
  • MemoryHigh=80M 是软限制,超过后系统会尝试回收内存,但不强制杀掉。

2. 启动服务并查看效果

sudo systemctl daemon-reload
sudo systemctl start test-resource.service
sudo systemctl status test-resource.service

看到 active (running) 后,用 topsystemd-cgtop 查看资源使用:

systemd-cgtop

你会看到 test-resource.service 的 CPU 百分比被限制在 50% 左右,内存不会超过 100M。

3. 运行时动态修改资源限制(核心)

无需重启服务,直接调整 CPU 配额:

sudo systemctl set-property test-resource.service CPUQuota=80%

几秒后生效,再用 systemd-cgtop 观察,CPU 使用率会自动上升到接近 80%。
同样可以改内存:

sudo systemctl set-property test-resource.service MemoryMax=200M

这个命令会同时写入 /etc/systemd/system.control/ 下的临时文件,重启后失效。
如果想永久生效,需要加 --runtime 或直接修改 unit 文件然后 daemon-reload

避坑指南:新手容易踩的三个坑

  • 单位必须大写100M50% 中的 M 和 % 要跟示例一致,写成 100m50 会报错。
  • CPUQuota 是相对单核:如果你服务器有 8 核,CPUQuota=200% 表示最多用满 2 个核心。新手常以为 100% 就是全部,其实是单核。
  • 内存超限不会立即杀掉进程MemoryMax 是硬限制,但系统有缓冲区,超过后有时会延迟几秒才 OOM。MemoryHigh 是软限制,超过后会触发系统回收,但进程不会死。测试时建议同时设置 MemoryMax 并减少数值。

高频问题解答

Q:如何查看当前资源限制值?
A:systemctl show test-resource.service --property=CPUQuota,MemoryMax

Q:怎么临时把限制解除?
A:设置成超大值即可,例如 CPUQuota=100000%(实际不会超过物理核心)。或者删除对应的 unit 文件属性,但推荐直接卸载服务。

Q:重启后限制还在吗?
A:用 set-property 不指定 --runtime 时,重启后会恢复为 unit 文件中的值。想永久生效可以在 unit 文件中写死后执行 daemon-reload

效果验证:确认动态调度正常工作

  1. 运行 stress 工具(如果没有,先安装 epel-release 然后 yum install stress)发起压力测试:
sudo stress --cpu 4 --timeout 30 &
  1. 在另一个终端用 systemd-cgtop 监控,确认 CPU 总和不超过你设置的总值。
  2. 再执行 sudo systemctl set-property test-resource.service CPUQuota=30%,观察 CPU 立刻下降。
  3. journalctl -u test-resource.service 查看日志,确认没有 OOM 或错误记录。

如果你正在配置服务器资源动态调度,建议先用测试服务练手,再应用到真实业务。
遇到异常时,优先回看本文的避坑点和高频问题,通常很快就能解决。

分享到:
上一篇
预测性维护服务器状态监控:服务器预测性维护监控零基础教程
下一篇
容器资源限制防止恶意抢占:Docker容器资源限制防恶意抢占
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意