用top或者ps命令会输出PRI/PR、NI、%ni/%nice这三种指标值,这些究竟是什么东西?先给出大概的解释以下:oracle
PRI :进程优先权,表明这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行ui
NI :进程Nice值,表明这个进程的优先值spa
%nice :改变过优先级的进程的占用CPU的百分比 (呵呵,这句好难理解是吧,不急慢慢来^_^)排序
PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的前后顺序,此值越小进程的优先级别越高。那NI呢?就是咱们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。由此看出,PR是根据NICE排序的,规则是NICE越小PR越前(小,优先权更大),即其优先级会变高,则其越快被执行。若是NICE相同则进程uid是root的优先权更大。继承
在LINUX系统中,Nice值的范围从-20到+19(不一样系统的值范围是不同的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具备最高优先级的程序,其nice值最低,因此在LINUX系统中,值-20使得一项任务变得很是重要;与之相反,若是任务的nice为+19,则表示它是一个高尚的、无私的任务,容许全部其余任务比本身享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。进程
进程在建立时被赋予不一样的优先级值,而如前面所说,nice的值是表示进程优先级值可被修正数据值,所以,每一个进程都在其计划执行时被赋予一个nice值,这样系统就能够根据系统的资源以及具体进程的各种资源消耗状况,主动干预进程的优先级值。在一般状况下,子进程会继承父进程的nice值,好比在系统启动的过程当中,init进程会被赋予0,其余全部进程继承了这个nice值(由于其余进程都是init的子进程)。资源
对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,若是他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。可是假设进程A的为0,可是B的值为-10,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故能够形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。%nice,就是改变过优先级的进程的占用CPU的百分比,如上例中就是0.5k/2.5k=1/5=20%。it
因而可知,进程nice值和进程优先级不是一个概念,可是进程nice值会影响到进程的优先级变化。io
进程的nice值是能够被修改的,修改命令分别是nice和renice。import
一、nice命令就是设置一个要执行command进程的nice值,其命令格式是 nice –n adjustment command command_option,若是这里不指定adjustment,则默认为10。
二、renice命令就是设置一个已经在运行的进程的nice值,假设一运行进程原本nice值为0,renice为3后,则这个运行进程的nice值就为3了。
说明:若是用户设置的nice值超过了nice的边界值(LINUX为-20到+19),系统就取nice的边界值做为进程的nice值。
举例以下:
对非root用户,只能将其底下的进程的nice值变大而不能变小。若想变小,得要有相应的权限。
[oracle@perf_dbc ~]$ nice
0
[oracle@perf_dbc ~]$ nice -n 3 ls
agent bin important_bak logs statistics_import.log TMP_FORUM_STATS.dmp TMP_TAOBAO_STATS.dmp TMP_TBCAT_STATS.dmp top.dmp worksh
[oracle@perf_dbc ~]$ nice -n -3 ls
nice: cannot set priority: Permission denied
对root用户,能够给其子进程赋予更小的nice值。
[root@dbbak root]# nice
0
[root@dbbak root]# nice -n -3 ls
192.168.205.191.txt anaconda-ks.cfg clariion.log Desktop disk1 emc.sh File_sort install.log install.log.syslog log OPS rhel_os_soft root_link_name
一样,renice的执行也必需要有相应的权限方可执行。