进程优先级nice

  • Linux 进程调度及多任务
  • 相对优先级nice
  • 查看进程的nice级别
  • 启动具有不同nice级别的进程
  • 更改现有进程的nice级别

    Linux 进程调度及多任务

    每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的CPU及核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而给用户多个进程在同时运行的印象。

    相对优先级 nice

    由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为 SCHED_OTHER (也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。
    SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种不同级别的nice值。
    进程优先级 nice - 图1
    nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
    nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。

    PR范围大,NI范围小 将小范围映射到大范围

    **

    修改 NI 值时有几个注意事项:

  • NI 范围是 -20~19。

  • 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
  • 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
  • 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

    **

    查看进程的nice级别

  1. 使用top查看nice级别
    NI: 实际nice级别
    PR: 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
    3. 使用ps查看nice级别
    [root@tianyun ~]# ps axo pid,command,nice —sort=-nice
    [root@tianyun ~]# ps axo pid,command,nice,cls —sort=-nice
    TS 表示该进程使用的调度策略为SCHED_OTHER

    启动具有不同nice级别的进程

    启动进程时,通常会继承父进程的 nice级别,默认为0。
    [root@localhost ~]# nice -n -5 sleep 6000 &
    [root@localhost ~]# ps axo command,pid,nice |grep sleep

[root@localhost ~]# nice -n -20 service httpd start
[root@localhost ~]# ps axo pid,command,nice,cls |grep httpd
11116 /usr/sbin/httpd -20 TS
11119 /usr/sbin/httpd -20 TS
11120 /usr/sbin/httpd -20 TS
11121 /usr/sbin/httpd -20 TS
11122 /usr/sbin/httpd -20 TS
11123 /usr/sbin/httpd -20 TS
11124 /usr/sbin/httpd -20 TS
11125 /usr/sbin/httpd -20 TS
11126 /usr/sbin/httpd -20 TS

更改现有进程的nice级别

  1. 使用top更改nice级别
    r 调整进程的优先级(Nice Level) (-20高) ---0--- (19低)
    2. 使用shell更改nice级别[root@localhost ~]# sleep 7000 &
    [3] 10089
    [root@locaLhost ~]# renice -20 10089
    10089: old priority 0, new priority -20

案例查看
[root@bogon ~]# sleep 7000 &
[1] 2864
[root@bogon ~]# nice -n -20 sleep 8000 &
[2] 2889
[root@bogon ~]# ps axo command,pid,nice | grep sleep
sleep 7000 2864 0
sleep 8000 2889 -20
grep —color=auto sleep 3150 0
[root@bogon ~]# renice -20 2864
2864 (进程 ID) 旧优先级为 0,新优先级为 -20
[root@bogon ~]# ps axo command,pid,nice | grep sleep
sleep 7000 2864 -20
sleep 8000 2889 -20
grep —color=auto sleep 3185 0