0

0

Linux 进程优先级与调度策略实战

冷漠man

冷漠man

发布时间:2026-01-29 19:41:02

|

371人浏览过

|

来源于php中文网

原创

真实优先级取决于调度策略:普通进程pri=20+ni,实时进程pri=100+rtprio;需用ps -eo pid,comm,ni,pri,cls,rtprio或top启用CLS/RTPRIO列查看,renice对实时进程无效,chrt需先配置ulimit -r或limits.conf。

linux 进程优先级与调度策略实战

如何用 pstop 看清进程的真实优先级?

pstop 显示的 “PRI”、“NI”、“PR” 容易让人混淆,尤其当调度策略不是默认的 SCHED_OTHER 时。真实优先级(即内核调度器实际使用的值)取决于策略类型,不能只看 NI(nice 值)。

  • ps -eo pid,comm,ni,pri,cls,rtprio 是最实用的组合:其中 cls 显示调度类(如 TS 表示 CFS,FF 表示 SCHED_FIFO),rtprio 对实时进程才有意义,pri 是内核内部的静态优先级(范围 0–139),但注意:对普通进程,pri = 20 + ni;对实时进程,pri = 100 + rtprio
  • top 默认不显示调度策略,按 f 进入字段管理,启用 CLSRTPRIO 列,否则你会误以为所有进程都走 CFS
  • 常见错觉:看到某个进程 NI = -5 就以为它“很优先”,但如果它是 cls=TS 且没设 rtprio,那它和 NI = 0 的进程在 CFS 下竞争 CPU 的权重其实只差一点点——nice 值对响应延迟影响远不如调度类切换来得剧烈

chrt 设置实时调度策略时为什么总报 “Operation not permitted”?

这不是权限不够,而是默认情况下非 root 用户无法使用 SCHED_FIFOSCHED_RR。内核通过 RLIMIT_RTPRIO 限制实时优先级使用,即使你用 sudo 启动程序,若未显式提升该 limit,仍会失败。

  • 检查当前限制:ulimit -r,通常返回 0(表示禁止)
  • 临时提权(需 root):sudo ulimit -r 99 && exec sudo -s 不生效,正确做法是先用 sudo bash,再在该 shell 中运行 ulimit -r 99,然后启动目标进程
  • 更稳妥的方式是修改 /etc/security/limits.conf
  • soft rtprio 99
  • hard rtprio 99 注意:该配置仅对新登录会话生效,且要求 PAM limits 模块已启用(检查 /etc/pam.d/common-session 是否含 pam_limits.so

renice 对实时进程完全无效?

是的。renice 只修改 NI 字段,而 NI 仅被 CFS(SCHED_OTHER / SCHED_BATCH)读取。一旦进程被 chrt -f 设为 SCHED_FIFO,它的调度行为就彻底脱离 nice 机制。

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  • 你执行 renice -20 $(pidof myproc) 后再用 ps -o pid,ni,cls 查看,NI 会变,但 cls 仍是 FF,且调度器完全忽略该 NI
  • 实时进程的“优先级”由 rtprio 决定(范围 1–99),必须用 chrt --fifo 50 ./myprocchrt -p 50 $PID 修改
  • 错误操作示例:chrt -f 10 ./a.out & renice -20 $! —— 后者毫无意义,还可能误导你认为“双重加成”

为什么改了 NI 却看不出 CPU 分配变化?

CFS 不是按“固定时间片”分配 CPU,而是基于 vruntime(虚拟运行时间)做红黑树调度。NI 影响的是进程的“权重”,而非抢占时机或时间片长度。低 nice 值(如 -10)只是让该进程在同等时间内获得约 2.5 倍于 NI=0 进程的 CPU 时间,但前提是:它真正在跑、且有其他可运行进程在竞争。

  • 验证方法:用两个计算密集型进程(如 yes > /dev/null &),一个 renice -10,一个保持默认,再用 pidstat -u 1 观察 %CPU 分布,才能看到权重差异
  • 容易忽略的干扰项:I/O 等待、锁竞争、cgroup 限频、CPU affinity(taskset)都会掩盖 nice 效果
  • 最典型的失效场景:单核机器上只有一个 CPU 密集型进程在跑,无论 NI 是多少,它都占满 100% —— 因为没有竞争者,权重无从体现

真正难调的从来不是数字本身,而是搞清哪个调度器在管这个进程、它有没有实际竞争、以及你的观测工具是否在看对的字段。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

315

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

751

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

93

2025.08.19

磁盘配额是什么
磁盘配额是什么

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

1415

2023.06.21

如何安装LINUX
如何安装LINUX

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

706

2023.06.29

linux find
linux find

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

295

2023.06.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号