​​Linux PR(Priority)​​ 和 ​​NI(Nice)进程优先级详解

​​Linux PR(Priority)​​ 和 ​​NI(Nice)进程优先级详解

在Linux的top命令中,​​PR(Priority)​​ 和 ​​NI(Nice)​​ 是进程优先级相关的核心参数,共同影响内核调度器分配CPU资源的顺序。以下是详细解析:

⚖️ ​​1. PR(Priority)——进程的实际优先级​​

​​定义​​:

PR表示进程在内核调度队列中的​​动态优先级​​,是内核决定CPU时间片分配的直接依据。

​​取值范围​​:

​​普通进程​​:0~39(数值越小,优先级越高)

​​实时进程​​:显示为 RT 或负数(如 -2),优先级高于所有普通进程。

​​作用​​:

PR值越低,进程越优先获得CPU时间片。例如,PR=15的进程会比PR=20的进程更频繁执行。

🎚️ ​​2. NI(Nice)——用户可调整的优先级偏移量​​

​​定义​​:

NI是用户态进程的​​谦让值​​(Nice Value),允许用户间接调整进程优先级。

​​取值范围​​:-20~19(默认值为0)

​​负值​​(如-20):提高优先级,进程更“贪婪”地占用CPU。

​​正值​​(如19):降低优先级,进程更“谦让”,减少CPU占用。

​​权限限制​​:

普通用户只能​​提高NI值​​(0~19,降低优先级)。

​​Root用户​​可设置任意值(包括负值,提高优先级)。

🔗 ​​3. PR与NI的关系​​

​​普通进程​​:满足公式 ​​PR = 20 + NI​​

NI值

PR值

优先级效果

-20

0

最高优先级

0

20

默认优先级

19

39

最低优先级 。

​​实时进程​​:

NI值无效,优先级由chrt命令直接设置(范围1~99),PR显示为RT或负数。

⚙️ ​​4. 核心作用:优化CPU资源分配​​

​​高优先级场景​​(如关键服务):

通过sudo nice -n -10 启动进程,使PR=10,确保及时响应。

​​低优先级场景​​(如后台任务):

使用nice -n 19 ,让进程仅在CPU空闲时运行,避免争抢资源。

​​系统性能监控​​:

top中的%ni指标显示被调整NI值的进程占用CPU的百分比,帮助识别低优先级任务是否过度消耗资源。

🔍 ​​5. 查看与修改方法​​

​​查看PR/NI​​:

top -p # 动态查看

ps -eo pid,ni,pri,cmd | grep <进程名> # 静态查看

​​修改NI值​​:

nice -n 5 # 启动新进程时设置NI

renice 10 -p # 修改运行中进程的NI

​​实时进程设置​​(需root):

chrt -f -p 90 # 设SCHED_FIFO策略,实时优先级90

⚠️ ​​6. 注意事项​​

​​实时进程风险​​:

实时进程(如SCHED_FIFO)会​​饿死普通进程​​,需谨慎使用。

​​NI调整限制​​:

修改NI后PR未变?可能是进程为实时策略或系统负载过低。

​​生产环境建议​​:

关键服务:NI=-5~-10

批处理作业:NI=10~15

避免NI=-20,防止其他进程完全饿死。

💎 ​​总结​​

​​PR​​是内核调度的核心依据,​​NI​​是用户调整优先级的杠杆。

通过PR = 20 + NI的联动,实现进程资源占用的精细控制。

合理设置NI值可平衡关键任务响应速度与后台任务资源占用,是系统性能调优的基础手段。

相关数据