在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 <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. 注意事项​

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

  2. ​NI调整限制​​:
    修改NI后PR未变?可能是进程为实时策略或系统负载过低。

  3. ​生产环境建议​​:

    • 关键服务:NI=-5~-10
    • 批处理作业:NI=10~15
    • 避免NI=-20,防止其他进程完全饿死。

💎 ​​总结​

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

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

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

posted on 2025-07-30 17:55  LeeHang  阅读(430)  评论(0)    收藏  举报