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

Linux 进程调度管理

文章目录

  • Linux 进程调度管理
    • 进程调度器
      • 实时调度器
      • 非实时调度器
    • 管理进程优先级
      • 非实时调度策略
        • nice 值
        • nice 值查看
        • nice 命令
        • renice 命令
        • top 命令
      • 实时调度策略

Linux 进程调度管理

进程调度器

现代计算机系统中既包含只有单个CPU且任何时候都只能处理单个指令的低端系统到具有几百个cpu、每个cpu有多个核心的高性能超级计算机,可以并行执行几百个指令。所有这些系统都有一个共同点:系统进程线程数量超出了CPU数量。

Linux系统看起来可以同时执行多个进程,多个进程轮流使用CPU。内核使用进程调度器决定如何分配CPU时间。为了更好地运行,进程调度器必须平衡不同的条件,快速决定下个执行的进程,确保进程获得公平的CPU时间:

  • 按时间片轮转(10-20ms为1个时间片 )
  • 按优先级调度,允许高优先级进程获取更多的共享CPU时间,低优先级进程获取更少的共享CPU时间。

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

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

实时调度器

实时调度器支持的调度策略:

  • SCHED_RR,roundrobin 轮询调度策略。相同优先级的进程轮流获取相同的CPU时间。
  • SCHED_FIFO,先入先出调度策略。被分配到的CPU时间的进程会一直运行,直到被IO阻塞(也称为sched_yield),会被高优先级进程抢占。

实时调度器管理的进程运行优先级范围如下:

即使系统运行实时调度程序,也要保持可响应状态,至少ssh可用。

管理员可以使用以下两个sysctl参数,阻止实时调度策略下运行的程序占用所有CPU时间:

  • kernel.sched_rt_runtime_us,在kernel.sched_rt_period_us内实时态进程可使用的共享CPU时间,默认值950000,也就是0.95秒。设置为0,实时调度进程将无法获取CPU时间。
  • kernel.sched_rt_period_us,CPU分配的周期时间,单位us,默认值1000000,也就是1秒。

从kernel.sched_rt_period_us 中减去 kernel.sched_rt_runtime_us 后的剩余时间交给非实时调度器SCHED_NORMAL调度。

  • kernel.sched_rr_timeslice_ms,在SCHED_RR调度下的进程每次轮询获取的CPU时间,单位ms,默认值100,也就是0.1秒,有效范围1-100。

非实时调度器

非实时调度器支持的调度策略:

  • SCHED_NORMAL标准的轮询方式时间共享调度,也称为SCHED_OTHER
  • SCHED_BATCH,针对批量方式执行的进程策略。不像SCHED_NORMAL频繁竞争,任务可以长时间运行
  • SCHED_IDLE,用于执行非常低的优先级应用。使用SCHED_IDLE调度策略运行的进程比nice 19运行的进程优先级还低。

管理进程优先级

非实时调度策略

nice 值

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

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

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

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

nice 值查看

top 命令

ps命令

[ljw@server ~17:28:00]$ps-onice,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。

[ljw@server ~17:28:37]$ps-opid,nice,command$$3649PID NI COMMAND19340-bash36490md5sum /dev/zero# $$ 代表当前终端中运行的 shell 程序 PID

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

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

nice 命令
# nice值默认是10[ljw@server ~17:29:02]$nicemd5sum /dev/zero&[2]4306[ljw@server ~18:33:03]$ps-opid,nice,command PID NI COMMAND19340-bash36490md5sum /dev/zero430610md5sum /dev/zero43070ps-opid,nice,command

普通用户仅允许使用正数的nice值运行程序。

# 设置一个负数优先级[ljw@server ~18:33:19]$nice-n-2md5sum /dev/zero&[3]4322[ljw@server ~18:33:50]$ nice: 无法设置优先级: 权限不够[ljw@server ~18:33:56]$ps-opid,nice,command4322PID NI COMMAND43220md5sum /dev/zero# 设置一个正数优先级[ljw@server ~18:34:13]$nice-n2md5sum /dev/zero&[4]4324[ljw@server ~18:34:26]$ps-opid,nice,command4324PID NI COMMAND43242md5sum /dev/zero
renice 命令

修改进程的优先级。

[ljw@server ~18:34:35]$renice-n243224322(进程 ID)旧优先级为0,新优先级为2[ljw@server ~18:35:27]$ps-opid,nice,command4322PID NI COMMAND43222md5sum /dev/zero

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

[ljw@server ~18:35:40]$renice-n-24324renice: 设置4324的优先级失败(进程 ID): 权限不够[ljw@server ~18:36:03]$ps-opid,nice,command4324PID NI COMMAND43242md5sum /dev/zero# 使用root用户调整[root@server ~18:36:29]# renice -n -2 43244324(进程 ID)旧优先级为2,新优先级为-2[ljw@server ~18:36:53]$ps-opid,nice,command4324PID NI COMMAND4324-2md5sum /dev/zero
top 命令

top 界面查看进程CPU使用率:4324和3649,CPU使用率非常接近,因为优先级一致。

在该界面中使用r指令设置进程nice值。

终止之前创建的3个md5sum进程。

[ljw@server ~18:39:59]$pkillmd5sum[ljw@server ~18:40:05]$jobs[1]已终止 md5sum /dev/zero[2]已终止nicemd5sum /dev/zero[3]- 已终止nice-n-2md5sum /dev/zero[4]+ 已终止nice-n2md5sum /dev/zero

实时调度策略

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

# 查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。[ljw@server ~18:40:17]$ 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进程[root@server ~18:41:37]# chrt -r 5 md5sum /dev/zero &[1]4595[root@server ~18:42:00]# ps -o pid,rtprio,command 4595PID RTPRIO COMMAND45955md5sum /dev/zero#调整为实时运行,导致cpu剩余消耗低,bash,top等非实时运行会卡顿# 修改进程调度器和优先级[root@server ~18:42:26]# chrt -f --pid 10 4595[root@server ~18:42:57]# ps -o pid,cls,rtprio,command 4595PID CLS RTPRIO COMMAND4595FF10md5sum /dev/zero# 修改进程调度器为非实时[root@server ~18:43:24]# chrt -o --pid 0 4595[root@server ~18:43:43]# ps -o pid,cls,rtprio,command 4595PID CLS RTPRIO COMMAND4595TS - md5sum /dev/zero
http://www.jsqmd.com/news/1291775/

相关文章:

  • 图形学光照模型实战:从Phong到Blinn-Phong的原理、实现与调试
  • SSM框架开发高校教学质量评价系统实战解析
  • 如何使用AI完成数据分析
  • CTF逆向工程:花指令原理、识别与去除实战指南
  • 5位AI博主爆肝7天,把腾讯WorkBuddy的用法全写开源了!
  • Windows平台C++版PaddleOCR GPU编译部署全攻略
  • 2026 年新消息:来宾靠谱的铁路声屏障源头厂家哪家好,列车过站时那恼人的轰鸣,原来藏着这么个能悄悄降噪的妙招! - 行业严选官
  • 瑞兴华菜馆(峨嵋路店),南京市玄武湖周边的宝藏金陵家常菜馆 - 星序拾遗
  • 2026年7月柏莱妮美妆培训/云南化妆培训优质推荐_昆明市五华区柏莱妮职业培训学校有限公司 - 品牌宣传支持者
  • GPU配置全解析:从硬件识别到深度学习环境搭建与性能监控
  • AI大模型实战之玩转部署与微调DeepSeekOCR+大模型就业+项目简历+面试题!
  • Typora-免费激活使用教程转载
  • SVM支持向量机:从最大间隔原理到Scikit-learn实战应用
  • Unity AR图片上传至服务器并生成微信可扫码链接全流程解析
  • 2026AI论文工具稀缺功能排行榜[特殊字符]真正有独家技术的只有OKBIYE
  • PX4无人机Offboard模式实战:从MAVROS通信到真机部署全解析
  • 2026深度实测:16款降AIGC网站实测,闭眼入这款就对了!
  • 设计 Token 的极限:当原子化走到尽头——语义层的真正价值
  • 2026年7月甜瓜膨大素/青岛甜瓜膨大素厂家推荐指南_青岛肖恩克进出口贸易有限公司 - 品牌宣传支持者
  • 《计算机工程与应用》投稿实战:从格式自查到审稿回复的完整指南
  • MATLAB实现无线传感器三边定位算法及误差分析
  • 京东单品优惠券全攻略:从获取逻辑到实战避坑指南
  • 高粘度浆液裂隙注浆模拟技术与工程优化实践
  • FastAPI 从入门到实战:构建高性能 Python Web API 的完整指南
  • 2026年毕业论文AI检测避坑指南与实战技巧
  • 大模型项目: 学习FastAPI 服务器开发
  • 2026年7月江苏SH601IC芯片/SH901IC芯片公司精选推荐_昆山歆轩电子有限公司 - 行业平台推荐
  • 高级英语精读:从文本分析到批判性思维的深度学习路径
  • AI培训材料迭代慢?某头部科技公司已启用“实时反馈—自动重生成”闭环系统(架构图+配置参数首次解禁)
  • 2026年7月天津本地GEO优化服务商梯队梳理 - 星序拾遗