智传网优云课堂,专注分享IT技术
与IT技术爱好者一起共同学习进步

Linux调整进程优先级之nice命令

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为默认值的居多。

了解Linux进程调度
当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。

使用nice默认值

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

Linux调整进程优先级

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
赞(0)
分享到: 更多 (0)

学习QQ群:557371664

关注微信公众号自助视频学习

评论 抢沙发

评论前必须登录!