在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用户可设置任意值(包括负值,提高优先级)。
- 普通用户只能提高NI值(
🔗 3. PR与NI的关系
-
普通进程:满足公式
PR = 20 + NINI值 PR值 优先级效果 -200最高优先级 020默认优先级 1939最低优先级 。 -
实时进程:
NI值无效,优先级由chrt命令直接设置(范围1~99),PR显示为RT或负数。
⚙️ 4. 核心作用:优化CPU资源分配
-
高优先级场景(如关键服务):
通过sudo nice -n -10 <command>启动进程,使PR=10,确保及时响应。 -
低优先级场景(如后台任务):
使用nice -n 19 <command>,让进程仅在CPU空闲时运行,避免争抢资源。 -
系统性能监控:
top中的%ni指标显示被调整NI值的进程占用CPU的百分比,帮助识别低优先级任务是否过度消耗资源。
🔍 5. 查看与修改方法
-
查看PR/NI:
top -p <PID> # 动态查看 ps -eo pid,ni,pri,cmd | grep <进程名> # 静态查看 -
修改NI值:
nice -n 5 <command> # 启动新进程时设置NI renice 10 -p <PID> # 修改运行中进程的NI -
实时进程设置(需root):
chrt -f -p 90 <PID> # 设SCHED_FIFO策略,实时优先级90
⚠️ 6. 注意事项
-
实时进程风险:
实时进程(如SCHED_FIFO)会饿死普通进程,需谨慎使用。 -
NI调整限制:
修改NI后PR未变?可能是进程为实时策略或系统负载过低。 -
生产环境建议:
- 关键服务:
NI=-5~-10 - 批处理作业:
NI=10~15 - 避免
NI=-20,防止其他进程完全饿死。
- 关键服务:
💎 总结
-
PR是内核调度的核心依据,NI是用户调整优先级的杠杆。
-
通过
PR = 20 + NI的联动,实现进程资源占用的精细控制。 -
合理设置NI值可平衡关键任务响应速度与后台任务资源占用,是系统性能调优的基础手段。
浙公网安备 33010602011771号