当前位置: 首页 > news >正文

Linux 进程调度与进程优先级管理详解|nice/renice/chrt 实操教程 ⚙️

Linux 进程调度与进程优先级管理详解|nice/renice/chrt 实操教程 ⚙️

前言

Linux 服务器同时运行成百上千个进程,CPU 资源有限,内核依靠进程调度器分配 CPU 时间片。不同业务进程重要程度不同,我们可以手动调整进程优先级,让核心业务优先占用算力,降低后台消耗型任务资源占用。

本文完整讲解 Linux 实时 / 非实时调度策略、nice 值、nice/renice/chrt实操命令,生产环境直接可用。

一、Linux 进程调度器基础 🧠

系统进程数量通常远大于 CPU 核心数,内核调度器通过时间片轮转、优先级划分,实现 “多进程同时运行” 的视觉效果。

单时间片约 10~20ms,进程轮流抢占 CPU。

进程调度器可粗略分为两类:

  • 实时调度器,系统中重要的进程由实时调度器调度,获得CPU能力强
  • 非实时调度器,系统中大部分进程由非实时调度器调度,获得CPU能力弱。

核心结论:所有实时调度进程优先级,全部高于非实时普通进程。

1. 实时调度器(高优先级业务)

用于服务器核心关键程序,抢占 CPU 能力极强,包含两种调度策略:

  1. SCHED_FIFO 先入先出

    进程拿到 CPU 后持续运行,直到进程主动让出 CPU、IO 阻塞,或被更高优先级实时进程抢占。

  2. SCHED_RR 时间片轮询

    同优先级实时进程平分固定 CPU 时间片,时间片耗尽切换下一个同优先级进程。

实时调度内核防护参数(防止占满 CPU)

为避免实时进程耗尽 CPU 导致服务器卡死、SSH 无法连接,内核提供 3 个限制参数:

  1. kernel.sched_rt_runtime_us:1 秒周期内,实时进程最多占用 0.95s(默950000us)

  2. kernel.sched_rt_period_us:CPU 分配总周期,默认 1s(1000000us)

    剩余 0.05s 固定留给普通非实时进程,保障系统基础服务可用。

  3. kernel.sched_rr_timeslice_ms:SCHED_RR 策略单次时间片,默认 100ms,范围 1~100ms

实时进程优先级区间:1~99,数字越大优先级越高。

2. 非实时调度器(绝大多数普通进程)

日常程序、脚本、后台任务都属于此类,三种调度策略:

SCHED_OTHER(SCHED_NORMAL)标准分时调度

系统默认策略,依靠nice值区分相对优先级,绝大多数业务进程使用。

SCHED_BATCH 批量任务调度

后台批量计算任务,减少频繁 CPU 切换,适合长时间跑计算程序。

SCHED_IDLE 极低空闲调度

优先级比 nice=19 还要低,仅系统极度空闲时才会分配 CPU。

二、管理进程优先级📊

2.1 非实时进程优先级:nice 值全解

nice 值

常规系统上运行的大多数进程都使用SCHED_OTHER调度策略。由于并非所有进程都同等重要,因此可以为使用SCHED_OTHER调度策略运行的程序指定相对优先级,称为nice值。

有40种不同级别的nice值,范围-20(最高优先级)到19(最低优先级):

  • nice 值越高,代表优先级越低,获取CPU能力越弱
  • nice 值越低,代表优先级越高,获取CPU能力越强

注意:当不存在CPU资源竞争时,即使nice值高的进程也可以获得足够CPU资源。

nice 值查看

top 命令

进入 top 界面后,NI 列即为进程 nice 值,直观查看全量进程优先级与 CPU 占用。

ps命令

[root@server ~16:20:37]# ps -o nice,cmd $(pgrep systemd)NI CMD0/usr/lib/systemd/systemd --switched-root--system--deserialize220/usr/lib/systemd/systemd-journald0/usr/lib/systemd/systemd-udevd0/usr/lib/systemd/systemd-logind

默认情况下,子进程将继承父进程的nice值,通常为0。

[root@server ~16:21:05]# md5sum /dev/zero &[1]2608[root@server ~16:21:41]# ps -o pid,nice,command $$2608PID NI COMMAND23060-bash26080md5sum /dev/zero# $$ 代表当前终端中运行的 shell 程序 PID

实时调度器进程优先级和非实时调度器进程优先级对比如下:

结论:优先级最低的实时调度器进程的优先级高于优先级最高的非实时调度器进程的优先级。

nice 命令
[root@server ~16:23:33]# nice --h用法:nice[选项][命令[参数]...]Run COMMAND with an adjusted niceness,whichaffects process scheduling. With no COMMAND, print the current niceness. Niceness values range from-20(most favorable to the process)to19(least favorable to the process). Mandatory arguments to long options are mandatoryforshort options too. -n,--adjustment=Naddinteger N to the niceness(default10)--help显示此帮助信息并退出--version显示版本信息并退出 注意:您的shell 内含自己的nice 程序版本,它会覆盖这里所提及的相应 版本。请查阅您的shell 文档获知它所支持的选项。 GNU coreutils online help:<http://www.gnu.org/software/coreutils/>请向<http://translationproject.org/team/zh_CN.html>报告nice 的翻译错误 要获取完整文档,请运行:info coreutils'nice invocation'

示例:

# nice值默认是10[root@server ~16:23:41]# nice md5sum /dev/zero &[2]2696[root@server ~16:24:00]# ps -o pid,nice,commandPID NI COMMAND18840-bash26080md5sum /dev/zero269610md5sum /dev/zero27010ps-opid,nice,command

权限规则:普通用户只能调高 nice 值(降低优先级);只有 root 可设置负数值提升优先级。

普通用户无法设置负数,会提示权限不足

# 设置一个负数优先级[liulele@server ~16:25:29]$nice-n-2md5sum /dev/zero&[1]2852[liulele@server ~16:25:49]$ nice: 无法设置优先级: 权限不够 ^C[liulele@server ~16:25:56]$ps-opid,nice,command2852PID NI COMMAND28520md5sum /dev/zero# 设置一个正数优先级[liulele@server ~16:26:11]$nice-n2md5sum /dev/zero&[2]2908[liulele@server ~16:26:51]$ps-opid,nice,command2908PID NI COMMAND29082md5sum /dev/zero
renice 命令

nice只能在启动前设置,renice可在线修改已运行进程的 nice,无需重启程序。

[liulele@server ~16:28:08]$renice--help用法:renice[-n]<优先级>[-p|--pid]<pid>...renice[-n]<优先级>-g|--pgrp<pgid>...renice[-n]<优先级>-u|--user<用户>... 选项: -g,--pgrp<id>将参数解释为进程组 ID -n,--priority<数字>指定nice增加值 -p,--pid<id>将参数解释为进程 ID(默认)-u,--user<name|id>将参数解释为用户名或用户 ID -h,--help显示帮助文本并退出 -V,--version显示版本信息并退出 更多信息请参阅 renice(1)

修改上面示例中产生的进程的优先级。

[liulele@server ~16:28:14]$renice-n228522852(进程 ID)旧优先级为0,新优先级为2[liulele@server ~16:29:04]$ps-opid,nice,command2852PID NI COMMAND28522md5sum /dev/zero

普通用户只能升高进程nice值不能降低

[liulele@server ~16:28:14]$renice-n228522852(进程 ID)旧优先级为0,新优先级为2[liulele@server ~16:29:04]$ps-opid,nice,command2852PID NI COMMAND28522md5sum /dev/zero[liulele@server ~16:29:24]$ 登出[root@server ~16:29:33]# renice -n -2 28522852(进程 ID)旧优先级为2,新优先级为-2[root@server ~16:29:51]# renice -n -2 29082908(进程 ID)旧优先级为2,新优先级为-2[root@server ~16:30:15]# ps -o pid,nice,command 2852 2908PID NI COMMAND2852-2md5sum /dev/zero2908-2md5sum /dev/zero

top 内快速修改进程优先级

  1. 执行top进入监控界面
  2. 按下快捷键r
  3. 输入需要调整的进程 PID
  4. 输入新 nice 值回车生效

2.2 实时调度策略

chrt

chrt命令用于获取和设置实时调度器进程优先级,以及更改进程调度器。

[root@server ~17:01:54]# chrt --helpShow or change the real-time scheduling attributes of a process. Set policy: chrt[options]<priority><command>[<arg>...]chrt[options]--pid<priority><pid>Get policy: chrt[options]-p<pid>Policy options: -b,--batchsetpolicy to SCHED_BATCH -d,--deadlinesetpolicy to SCHED_DEADLINE -f,--fifosetpolicy to SCHED_FIFO -i,--idlesetpolicy to SCHED_IDLE -o,--othersetpolicy to SCHED_OTHER -r,--rrsetpolicy to SCHED_RR(default)Scheduling options: -R, --reset-on-forksetSCHED_RESET_ON_FORKforFIFO or RR -T, --sched-runtime<ns>runtime parameterforDEADLINE -P, --sched-period<ns>period parameterforDEADLINE -D, --sched-deadline<ns>deadline parameterforDEADLINE Other options: -a, --all-tasks operate on all the tasks(threads)fora given pid -m,--maxshow min and max valid priorities -p,--pidoperate on existing given pid -v,--verbosedisplay status information -h,--help显示此帮助并退出 -V,--version输出版本信息并退出 更多信息请参阅 chrt(1)

示例

# 查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。[root@server ~17:03:53]# chrt -mSCHED_OTHER min/max priority:0/0 SCHED_FIFO min/max priority:1/99 SCHED_RR min/max priority:1/99 SCHED_BATCH min/max priority:0/0 SCHED_IDLE min/max priority:0/0 SCHED_DEADLINE min/max priority:0/0# 以SCHED_RR调度器和优先级为5运行md5sum进程# -r, --rr set policy to SCHED_RR (default)[root@server ~17:14:24]# chrt -r 5 md5sum /dev/zero &[1]4664[root@server ~17:14:44]# ps -o pid,cls,command 4664PID CLS COMMAND4664RR md5sum /dev/zero# 修改进程调度器和优先级# -f, --fifo set policy to SCHED_FIFO[root@server ~17:15:09]# chrt -f --pid 10 4664[root@server ~17:16:22]# ps -o pid,cls,command 4664PID CLS COMMAND4664FF md5sum /dev/zero# 修改进程调度器为非实时# -o, --other set policy to SCHED_OTHER[root@server ~17:20:00]# chrt -o --pid 0 4664[root@server ~17:20:12]# ps -o pid,cls,command 4664PID CLS COMMAND4664TS md5sum /dev/zero
参数速查
  • -f:SCHED_FIFO 策略
  • -r:SCHED_RR 策略
  • -o:SCHED_OTHER 普通分时策略
  • -p:对已存在 PID 进行操作
  • -m:查看所有调度策略优先级区间

三、nice vs chrt 核心区别总结 💡

工具作用对象优先级范围使用权限适用场景
nice/renice非实时 SCHED_OTHER 进程-20~19普通用户仅能设正数,root 全权限后台日志、批量脚本、普通业务
chrt实时进程 FIFO/RR1~99仅 root 可用数据库、消息队列、核心高可用服务

系统中区分实时调度和非实时调度的进程

# FF实时# TS非实时[root@server ~17:01:39]# ps axo pid,class,command| sort -k2PID CLS COMMAND300FF[irq/16-vmwgfx]7FF[migration/0]11FF[watchdog/0]279TS[ata_sff]772TS avahi-daemon:chroothelper753TS avahi-daemon: running[server.local]2749TS-bash4143TS-bash716TS /bin/bash /usr/local/bin/study861TS /bin/bash /usr/sbin/ksmtuned18TS[bioset]19TS[bioset]

四、生产环境运维实操警示 ✨

  1. 数据库、中间件等核心服务,可通过 chrt 设置实时调度,保障高并发下响应速度;
  2. 磁盘备份、文件校验、日志统计等耗 CPU 脚本,使用nice 10降低优先级,避免抢占业务资源;
  3. 服务器 CPU 满载卡顿,优先排查 nice 为 - 20 或实时高优先级进程,防止独占 CPU;
  4. 普通业务程序不要随意设置实时调度,避免触发内核 rt 限制导致系统异常;
http://www.jsqmd.com/news/1291938/

相关文章:

  • AI 安全评测趋势:从静态基准走向对抗性红队
  • 南邮《数学实验》Matlab参考答案:从基础语法到向量化编程精解
  • claude CLI问题处理
  • 智能人才罗盘:当数据驱动遇见人才盘点,企业如何构建一张“看得清、用得上“的全景人才地图
  • QtCreator调试器配置与问题排查全攻略
  • 老板IP个性化人设塑造实操思路 落地性干货分享
  • 从芯片烧毁到稳定驱动:详解IO口驱动能力与电路设计实战
  • 3分钟找回丢失的压缩包密码:开源工具轻松破解加密压缩文件
  • 模型窃取防护趋势:水印、限流与行为指纹的协同
  • 零售业连锁收银软件源头厂家怎么选?
  • GDB远程调试实战:从原理到应用,解决嵌入式与服务器调试难题
  • Windows平台HPM5300 RISC-V开发环境搭建全攻略
  • AI跨专业协作:ChatGPT如何重塑职场边界与效率
  • UE5.4 Android VR打包实战:从环境配置到性能优化的完整指南
  • 开源AIGC工具如何终结创作拖延症:千笔AI与SpeedAI对比
  • 2026年AI原生一体化CRM选型清单:5款产品横评(排名不分先后)
  • STM32 ADC多通道DMA采集:原理、配置与数据处理实战
  • 单元测试中部分覆盖(Partially Covered)问题的分析与解决
  • GR86珠海站高温鏖战与失控瞬间,CORNERSPEED(CSS)弯速与团队淬炼再启航
  • 深入解析Xilinx AXI4-Lite Slave源码:从协议原理到FPGA实战开发
  • 数字电路设计实战:从亚稳态到跨时钟域处理的工程避坑指南
  • 别只会yum安装!源码编译|自建YUM仓库|计划任务|进程调度全套实战(CentOS7)
  • PCIe 6.0与CXL 3.2技术解析:下一代数据中心存储与内存扩展实战
  • STM32F103内部Flash数据存储实战:从原理到带磨损均衡的工程实现
  • 2026 年更新:娄星值得关注的CPVC电力管制造厂哪家可靠,埋在地下30年不裂的管线,竟是这不起眼的塑料管? - 行业推荐【认证官】
  • STM32CubeMX FOC电机控制:RCC时钟与GPIO配置实战指南
  • STM32 OLED调试工具开发:从驱动到波形与菜单的嵌入式可视化方案
  • Qt与Dear ImGui:C++跨平台GUI框架选型与实战对比
  • 备孕后月经越来越乱?欧聪维辅酶Q10改善黄体功能+内膜供血,排卵到着床一步到位
  • 小绿鲸其实才是大模型读文章的正确方法