1. 了解Linux进程调度
进程调度是Linux中非常重要的概念。Linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,需要一定的人工干预。比如如果你想高清电影播放器获取更多的CPU和内存资源,你可以把播放器的优先值调高。而这个优先级,就是指上述说的nice值。这里的“nice”是指“niceness”,即友善度、谦让度。注意的是,负数的优先级优先于正数的优先级,即nice为-1的进程比nice为1的进程更优先获取资源。而绝对值越大,效果越明显。nice值的范围是-20~19。-20最能抢占资源,19最友善。
Linux nice命令用于调整进程优先级以此获得系统不同的资源。当nice命令中没有给出具体的niceness值时,默认为10。如nice vi设置vi进程的niceness为10。一般的程序以0、10、20为默认值的居多。
当nice没有选项时,输出值表示系统进程缺省的niceness值,一般为0。
2. 使用nice默认值
以nice默认值启动vi,并编辑test.txt
[root@zcwyou ~]# nice vi test.txt
检查,18747是本次vi的ps进程号,使用ps -ef |grep vi
查询
[root@zcwyou ~]# top -p 18747
top – 15:37:57 up 1 day, 1:27, 2 users, load average: 0.04, 0.02, 0.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4040576 total, 3262100 free, 200572 used, 577904 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 3536068 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18747 root 30 10 126336 3536 3124 S 0.0 0.1 0:00.00 vi
最后一行可以看出,vi命令的nice值为10。
3. 指定nice值执行某任务
[root@zcwyou ~]# nice -n 8 vi test.txt
检查:19153是本次vi的ps进程号,使用ps -ef |grep vi
查询
[root@zcwyou ~]# top -p 19153
top – 15:40:58 up 1 day, 1:30, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4040576 total, 3264496 free, 198068 used, 578012 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 3538640 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19153 root 28 8 126336 3548 3136 S 0.0 0.1 0:00.00 vi
可以看出,nice已经调整为8了。
注意:如果设置的niceness值为负,那么必须要有管理员权限。
或者使用--adjustment
选项
--adjustment=N
选项
--adjustment
选项和-n选项的效果是一样的,在等号右边设置对应的niceness值即可。
例如:
[root@zcwyou ~]# nice --adjustment=8 vi test.txt
4. 理解PRI与NI的关系
[root@zcwyou ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 18760 18753 0 80 0 – 28961 do_wai pts/0 00:00:00 bash
0 R 0 19353 18760 0 80 0 – 38303 – pts/0 00:00:00 ps
请看以输出,NI列即表示进程的niceness值。ps进程对应的NI值正好为刚设置的0。而PRI表示进程当前的总优先级,值越小表示优先级越高,由进程默认的PRI加上NI得到,即PRI(new) = PRI(old) + NI。由上程序,ps进程默认的PRI是80,所以加上值为0的NI后,vi进程的PRI为80。
所以,需要注意的是,NI即niceness的值只是进程优先级的一部分,不能完全决定进程的优先级,但niceness值的绝对值越大,效果越显著。
5. 其他选项
--help
显示帮助信息
--version
显示版本信息
6. renice命令
renice,顾名思义,用于重新调整正在运行的进程niceness值。
6.1 renice语法
renice [优先等级][-g<程序群组名称>…][-p<程序识别码>…][-u <用户名称>…]
6.2 将PID为19153的进程的niceness设为-10
[root@zcwyou ~]# renice -10 -p 19153
19153 (进程 ID) 旧优先级为 8,新优先级为 -10
6.3 将属于用户ocr的进程的niceness设为5
[root@zcwyou ~]# renice 5 -u ocr
6.4 将属于zcwyou组的程序的niceness设为10
[root@zcwyou ~]# renice 10 -g zcwyou
评论前必须登录!
注册