admin管理员组文章数量:1623784
nice
nice就是一个linux上的一个程序,它直接映射到同名的内核调用。一般称之为静态优先级,即进程一旦开始,如果不用renice修改,改进程的nice不会发生变化。nice用于调用具有特定优先级的实用程序或shell脚本,即给了进程比其他进程更多或者更少的CPU时间。nice的值-20是最高优先级,19是最低优先级,就是说,nice值越大,优先级越低,值越小,优先级越大。一个程序默认的nice值是其父进程的nice的值,通常为0.
当几个进程要求的资源大于CPU能提供的资源时,nice值就会发挥作用。在这种情况下,一个高优先级的进程会得到更多的CPU时间.只有超级管理员,比如root可以任意修改nice的值,在一些其他版本的linux上可以通过/etc/security/limits.conf来允许其他用户或组设置一个更大的nice值,亲测ubuntu 16.04 LTS 是支持的。
为什么其他用户或组(非root)只能设置一个更大的nice呢?
主要是为了避免一般用户抢占资源,比如一台服务器,你的程序在跑,我的程序再跑。我为了我的程序快一点,就设置一个负的nice,那你的程序可能就比我的程序低优先级了,所以为了避免这种情况,一般用户只能设置比当前更大的nice值。
那nice如何使用呢?
根据wiki的例子,如果要解压一个文件,又不想让其他程序被减慢速度,例子:
nice -n 19 tar cvzf archive.tgz largefile
niceness具体的影响是由不同操作系统的调度器的具体实现决定的,不同的操作系统,在细节上可能是不一样。一台特定的操作系统也有不同的试探法,这句话就理解为一台特定的操作系统也有不同的实现吧。在top就可以看到进程的nice值,比如下面的NI就是gnome-shell的nice值。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1680 tangs 20 0 3430960 89472 39100 S 6.3 2.9 73:13.19 gnome-shell
下面用一个实例说明nice和renice是如果改变进程的niceness的。先开始一个nice为5的bash,写了循环等待的小程序名为nice,然后nice -n 10 ./nice &
以nice 10启动程序,但是程序最后的nice是15,这是因为nice是 设置的nice值+父进程的nice值=最终的nice值,而不是直接指定的。但是renice就是直接指定nice值的,但是必须比当前nice值大,否则 Permission denied
, 上面解释了一般用户只能修改为更大的nice值。
tangs@ubuntu:~/test$ nice -n 5 bash
tangs@ubuntu:~/test$ nice
5
tangs@ubuntu:~/test$ nice -n 10 ./nice &
[1] 29493
tangs@ubuntu:~$ ps -elf | grep nice
0 S tangs 29493 29273 0 95 15 - 603 futex_ 18:46 pts/1 00:00:00 ./nice
0 S tangs 29500 29092 0 80 0 - 5384 pipe_w 18:46 pts/2 00:00:00 grep --color=auto nice
tangs@ubuntu:~$ renice -n 16 29493
29493 (process ID) old priority 15, new priority 16
priority
priority通常称之为动态优先级,它的值是由系统分析之后动态调整的,用户是不能直接修改的。在操作系统中,进程的优先级取值范围通过宏MAX_PRIO定义,值为140,它由表示nice(-20 ~ 19)的宏NICE_WIDTH和表示实时进程优先级的宏MAX_RT_PRIO(max realtime priority, 取值0 ~ 99)组成。linux的优先级为0-139, 其中nice的-20~19对应100 ~ 139。进程默认的优先级为:
#define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH / 2)
priority和nice的相关性如下:
PRI(new) = PRI(old) + NI
即如果一个进程的priority=80, nice=10,那这个进程得到新的PRI就为可能90,因为priority是系统动态调整的,它是一个变量,所以可能为90。
参考文章:
- https://en.wikipedia/wiki/Nice_(Unix)
- https://wwwblogs/lcword/p/8267342.html#commentform
- http://blog.51cto/frankch/1773621
- http://linux.vbird/linux_basic/0440processcontrol.php#priority
版权声明:本文标题:linux优先级 nice 和 priority 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728896953a1178533.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论