Linux 怎么调整系统的任务调度权重提升关键业务

轻辰同学_1806

轻辰同学_1806

2026-09-09

146人浏览

原创

提升linux关键业务cpu调度权重的核心是调整cfs的调度权重而非抢占,推荐路径为:一、用nice/renice调ni值;二、用cgroup v2的cpu.weight设份额;三、慎用实时调度策略。

linux 怎么调整系统的任务调度权重提升关键业务

要提升关键业务在 Linux 系统中的 CPU 调度权重,核心不是“强行插队”,而是让 CFS(完全公平调度器)更自然地倾向它——通过调整其调度权重(即虚拟运行时间 vruntime 的累积速率),而非粗暴抢占或禁用其他任务。

以下分三类实操路径,按推荐顺序排列,兼顾效果、安全与可维护性:

一、用 nice/renice 调整普通进程的调度权重(最常用、最安全)

  • nice 和 renice 修改的是进程的 NI(nice 值),它直接影响 CFS 中该进程的 权重(weight) 和 vruntime 增长速度
  • NI 越小(如 -20),权重越大 → vruntime 增长越慢 → 更容易被调度器选中运行
  • 公式近似:权重 ∝ 1024 / (1.25 ^ NI),所以 NI=-10 的权重约是 NI=0 的 3.8 倍

操作示例:

# 启动时设高权重(更“不客气”)
nice -n -10 /usr/local/bin/critical-service

# 运行中动态提权(需 root 或 CAP_SYS_NICE 权限)
renice -n -10 -p $(pgrep -f "critical-service")

# 验证效果:看 PRI 是否下降(越小优先级越高)
ps -o pid,comm,nice,pri -C critical-service

⚠️ 注意:

  • 普通用户只能调高 NI(降低优先级),降 NI(提权)需 root 或对应 capability
  • 对同一 cgroup 内多个进程统一调权时,建议配合 systemd 服务文件设置 Nice=-10

二、用 cgroup v2 + CPU controller 精确分配份额(推荐用于容器/服务级隔离)

当关键业务以独立服务或容器运行时,cgroup 是比单个 nice 更稳定、可配额、可继承的方案:

Alpine Linux
Alpine Linux

获取最新发布版本;聚合最新版本架构

下载
  1. 确保启用 cgroup v2(RHEL 8+/Ubuntu 20.04+ 默认开启)
  2. 创建资源组并设定 CPU 权重(cpu.weight,范围 1–10000,默认 100):
    # 创建并配置
    sudo mkdir -p /sys/fs/cgroup/critical-app
    echo 500 | sudo tee /sys/fs/cgroup/critical-app/cpu.weight

将进程加入该组(PID 替换为实际值)

echo $PID | sudo tee /sys/fs/cgroup/critical-app/cgroup.procs

✅ 效果:  
- `cpu.weight=500` 表示该组获得的 CPU 时间约为默认组(weight=100)的 **5 倍份额**(非硬上限,是相对权重)  
- 支持多进程、子进程自动继承,且不受用户权限限制  
- 可搭配 `cpu.max` 设硬上限防失控,或 `cpu.pressure` 监控争抢情况  

? 推荐写入 systemd service 文件(如 `/etc/systemd/system/critical-app.service`):
```ini
[Service]
CPUWeight=500
# 或更细粒度:CPUSchedulingPolicy=fifo, CPUSchedulingPriority=50(仅限实时策略)

三、慎用实时调度策略(SCHED_FIFO/SCHED_RR)——仅限硬实时场景

  • 实时进程完全绕过 CFS,由独立实时队列管理,优先级(1–99)恒高于所有普通进程
  • 适用:毫秒级响应要求、无 I/O 阻塞、逻辑确定的嵌入式或金融交易模块

启用方式(需 root):

# 设置为 SCHED_FIFO,优先级 80(数值越大越优先)
chrt -f 80 /usr/local/bin/critical-realtime-app

# 查看是否生效
chrt -p $(pgrep critical-realtime-app)

⚠️ 风险极高:

  • 若该进程进入死循环或长时间不 sleep,会彻底饿死其他所有进程(包括 ssh、systemd)
  • 必须配套 ulimit -r 限制实时优先级上限,并确保代码有明确 yield 或阻塞点
  • 不适用于常规 Web/API/数据库等通用服务

不复杂但容易忽略:真正影响关键业务响应的,往往不是单个进程的权重,而是整个调度域的负载均衡(如跨 NUMA 节点迁移开销)和唤醒延迟。若观察到延迟抖动,应同步检查 sched_migration_cost_ns 和 sched_latency_ns,而非一味调高 nice。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3910

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3353

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2513

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6050

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5702

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3353

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2845

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3059

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习