zoukankan      html  css  js  c++  java
  • 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:

     

  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/machangwei-8/p/10391985.html
Copyright © 2011-2022 走看看