• nice和renice命令详解


      

    基础命令学习目录首页

    进程调度是linux中非常重要的概念。linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,需要一定的人工干预。比如,你希望操作系统能分配更多的CPU资源给浏览器进程,让浏览速度更快、更流畅,操作体验更好。那具体应该怎么做呢?尽管linux的进程调度算法十分复杂,但都是以进程的优先级为基础的。因此,只需要改变进程的优先级即可。

    在linux中,nice命令用于改变进程的优先级。

    nice命令?什么鬼?哪有命令直接说自己“nice”的?咋一看,这个名字确实很“nice”,只是这里的“nice”是指“niceness”,即友善度、谦让度。用于进程中,表示进程的优先级,也即进程的友善度。niceness值为负时,表示高优先级,能提前执行和获得更多的资源,对应低友善度;反之,则表示低优先级,高友善度。

    nice命令格式:nice [OPTION] [COMMAND [ARG]...]

    当nice没有选项时,输出值表示系统进程缺省的niceness值,一般为0。

    xie@xie-VirtualBox:~$ nice
    0
    

    nice命令中没有给出具体的niceness值时,默认为10。如nice vi设置vi进程的niceness为10。

    -n 选项

    -n选项后面跟具体的niceness值。niceness值的范围-20~19,小于-20或大于19的值分别记为-20和19。

    xie@xie-VirtualBox:~$ nice -n 10 vi&
    

    该命令设置vi进程的niceness值为10,也就是较低的优先级。

    如果设置的niceness值为负,那么必须要有管理员权限。这也不难理解,当niceness为负时,意味着该进程要抢占其他进程的资源,必须要有权限才行;如果niceness为正,即表示谦让度高,这对其他进程来说是喜闻乐见的,也当然就不用权限认证了。

    可以通过ps -l查看进程的niceness值。

    xie@xie-VirtualBox:~$ ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
    0 S  1000  1635  1634  0  80   0 -  2178 wait   pts/13   00:00:00 bash
    0 T  1000  1677  1635  0  90  10 -  1767 signal pts/13   00:00:00 vi
    0 R  1000  1678  1635  0  80   0 -  1606 -  pts/13   00:00:00 ps
    

    NI列即表示进程的niceness值。vi进程对应的NI值正好为刚设置的10。那PRI列又是什么呢?PRI表示进程当前的总优先级,值越小表示优先级越高,由进程默认的PRI加上NI得到,即PRI(new) = PRI(old) + NI。由上程序,进程默认的PRI是80,所以加上值为10的NI后,vi进程的PRI为90。
    所以,需要注意的是,NI即niceness的值只是进程优先级的一部分,不能完全决定进程的优先级,但niceness值的绝对值越大,效果越显著。

    --adjustment=N 选项

    --adjustment选项和-n选项的效果是一样的,在等号右边设置对应的niceness值即可。

    xie@xie-VirtualBox:~$ nice --adjustment=16 vi&
    [1] 1681
    xie@xie-VirtualBox:~$ ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
    0 S  1000  1635  1634  0  80   0 -  2178 wait   pts/13   00:00:00 bas
    0 T  1000  1681  1635  0  96  16 -  1767 signal pts/13   00:00:00 vi
    0 R  1000  1682  1635  0  80   0 -  1606 -  pts/13   00:00:00 ps
    

    注意,直接使用“-N”也可以设置niceness值。比如,nice -12 vi& 将vi的niceness值设置为12,如果是nice --12 vi&的话,则设置niceness的值为-12。这很容易混淆,建议使用-n或--adjustment选项,不易出错。

    其他选项

    --help       显示帮助信息
    --version 显示版本信息
    

    renice命令

    以上讨论的都是为即将运行的进程设置niceness值,而renice用于改变正在运行的进程的niceness值。

    renice,字面意思即重新设置niceness值,进程启动时默认的niceness值为0,可以用renice更新。

    renice语法:renice [优先等级][-g<程序群组名称>...][-p<程序识别码>...][-u <用户名称>...]

    如:

    renice -5 -p 5200  #将PID为5200的进程的niceness设为-5
    renice -5 -u xie   #将属于用户xie的进程的niceness设为-5
    renice -5 -g group1 #将属于group1组的程序的niceness设为5


    作者:Rabin_xie
    链接:https://www.jianshu.com/p/fd3dec3cd393
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    命令:nice

    参数:

    -n ,--adjustment=N 两个参数含义相同,设置进程优先级的谦让值(修正值)为N

    示例:

    nice -n -10 ws_gw 

    设置进程ws_gw的优先级的修正值为-10

    nice -19 ws_gw

    已优先级19来启动ws_gw,此时-不标识负数,而表示参数指令,已19优先级来启动;

    作用:

     nice命令以更改过的优先序来执行程序,如果未指定程序,则会印出目前的排程优先序,内定的 adjustment 为 10,范围为 -20(最高优先序)到 19(最低优先序)。

    --------也就是说要在启动时,在启动命令前加上 nice xx command才能生效;

    例如: nice -10  ./aaa ../conf/aa.xml 

    --------./aaa ../conf/aa.xml 为正常启动命令,nice -10 即已修正值为-10来启动aaa

    修正值的用法,进程真正的优先级=进程默认优先级+修正值(nice值)

    PRI(real) = PRI(old) + NI

    所以为负值则优先级越高,为正值优先级越低

    其他说明:

    top时进程信息字段的ni值即为修正值;最低为19,所以下图的20最终为19

    已19优先级启动vi

     已正常优先级启动vi

     已修正值-10启动vi:

     

  • 相关阅读:
    oracleI基础入门(6)sql语句Substring Crazy
    oracleI基础入门(7)table约束 Crazy
    oracleI基础入门(7)table视图 Crazy
    SQL附加分离数据库(命令)
    双截棍 C语言版 (超搞笑)
    AspNetPage分页(repeater),自己做的例子基本代码
    记录
    RegularExpressionValidator控件中正则表达式用法
    20 个经典的 Ajax + CSS 表格
    GridView各个事件中,怎样获取主键值
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/10391985.html
Copyright © 2020-2023  润新知