[RH134] 4-进程优先级

1.进程优先级

CPU是多任务的,在单核CPU中,CPU为每个任务分配时间片。假设每个任务的优先级是一样的,则每个任务都执行一个事件片,然后进入队列中等下下一个CPU时间片。

如果当某个任务非常重要时,我们就应该调整任务的优先级,分配更多的时间片给他。

在Linux中:

进程优先级 = 优先系数 + nice

其中,优先系数不建议修改,我们一般修改nice的值来改变进程的优先级,nice的取值范围为 [-20,19] 。

当进程优先级的值越大时,进程的优先级越低。
当进程优先级的值越小时,进程的优先级越高。

2.在图形界面下修改优先级

在centos7下,进入系统监视器:

然后在需要改变优先级的进程上点击右键:

 选择Change priority,可以选择一个列表中的级别。也可以选择Custom自定义:

可以看到Nice value越低,优先级越高。

3.命令行修改进程优先级

1)实验说明

实验目的:观察修改进程优先级,进程对CPU占用的变化情况。

实验条件:假设,我们的CPU是2核的,现在有2个进程p1和p2,如果这两个进程任务都很繁重(例如 cat /dev/zero > /dev/null & ,无限循环的读取数据,并丢弃)。则这两个进程可能会被分到两个CPU核心上去执行。

2)关闭一个CPU核心

我们要观察修改优先级的效果,就要让p1和p2在同一个CPU上去运行,实现方案有两个:

  • 关闭其中一个核心
  • 修改CPU核心的亲和度

这里,我们选用关闭一个核心的方案:

lscpu  # 查看当前CPU状态

关闭CPU核心1:

[root@centos7 cpu]# echo 0 > /sys/devices/system/cpu/cpu1/online

3)开启两个相同的高负荷进程

[root@centos7 cpu]# cat /dev/zero > /dev/null &
[1] 67983
[root@centos7 cpu]# cat /dev/zero > /dev/null &
[2] 67984

可以看到,p1和p2的进程ID分别为67983和67984。

4)使用TOP命令查看进程占用资源情况

top - 08:32:47 up 1 day,  9:14,  3 users,  load average: 1.70, 0.64, 0.33
Tasks: 195 total,   4 running, 191 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.8 us, 94.2 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  5166904 total,  2996052 free,  1070180 used,  1100672 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  4014436 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
 67984 root      20   0  107976    616    504 R 49.3  0.0   0:31.95 cat                                                                                                                                                                     
 67983 root      20   0  107976    616    504 R 49.0  0.0   0:33.59 cat      

可以看到,进程p1和p2占用的资源基本一致,PR=20,表示进程优先级的值为20,这是优先级的默认值(优先系数=20,nice=0)。

5)我们对p1修改nice值

修改p1进程的nice值为-20(优先级最高):

[root@centos7 cpu]# renice -n -20 67983
67983 (process ID) old priority 0, new priority -20

再使用TOP命令查看资源占用情况:

top - 08:35:36 up 1 day,  9:17,  3 users,  load average: 3.88, 1.78, 0.80
Tasks: 197 total,   6 running, 191 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.3 us, 93.4 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem :  5166904 total,  2995728 free,  1070504 used,  1100672 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  4014112 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
 67983 root       0 -20  107976    616    504 R 95.8  0.0   2:08.61 cat                                                                                                                                                                     
 67984 root      20   0  107976    616    504 R  1.3  0.0   1:41.20 cat       

可以看到,提高了优先级的p1进程占用了95.8%的CPU资源,而p2只占用了1.3%的CPU资源。

再将进程p1的nice值修改为19(优先级最低):

[root@centos7 cpu]# renice -n 19 67983 
67983 (process ID) old priority -20, new priority 19

使用top命令查看:

top - 08:37:51 up 1 day,  9:19,  3 users,  load average: 4.42, 3.03, 1.42
Tasks: 196 total,   3 running, 193 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us, 92.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  5166904 total,  2996212 free,  1070020 used,  1100672 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  4014596 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
 67984 root      20   0  107976    616    504 R 96.7  0.0   2:02.63 cat                                                                                                                                                                     
 67983 root      39  19  107976    616    504 R  1.3  0.0   3:58.71 cat   

可以看到,p1进程只占1.3%的CPU资源,而p2进程占用了96.7%的CPU资源。

4.在top命令中修改优先级

除了上面描述的,在图形界面和命令行使用renice修改进程优先级,还可以在top命令中直接修改进程优先级。

我们在top命令界面下,按 r 键(即renice),即可修改nice值:

top - 08:40:07 up 1 day,  9:21,  3 users,  load average: 2.58, 2.77, 1.54
Tasks: 194 total,   4 running, 190 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.1 us, 93.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  5166904 total,  2996776 free,  1069452 used,  1100676 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  4015164 avail Mem 
PID to renice [default pid = 67984] 67983
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
 67984 root      20   0  107976    616    504 R 95.3  0.0   4:12.77 cat                                                                                                                                                                     
 63510 root      20   0  608564  38684  25212 S  1.3  0.7   0:36.00 gnome-system-mo                                                                                                                                                         
 67983 root      39  19  107976    616    504 R  1.3  0.0   4:00.61 cat         

按了r键,会出现上述标黄部分的提示,默认修改的是第一个进程。我们可以输入需要修改优先级的进程ID来指定。

然后会让我们输入[-20,19]范围的值(即nice值):

top - 08:40:07 up 1 day,  9:21,  3 users,  load average: 2.58, 2.77, 1.54
Tasks: 194 total,   4 running, 190 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.1 us, 93.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  5166904 total,  2996776 free,  1069452 used,  1100676 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  4015164 avail Mem 
Renice PID 67983 to value -19
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                 
 67984 root      20   0  107976    616    504 R 95.3  0.0   4:12.77 cat                                                                                                                                                                     
 63510 root      20   0  608564  38684  25212 S  1.3  0.7   0:36.00 gnome-system-mo                                                                                                                                                         
 67983 root      39  19  107976    616    504 R  1.3  0.0   4:00.61 cat        

回车确认就修改成功了。

5.在运行进程时直接指定优先级(重要)

nice -n -20 cat /dev/zero > /dev/null &

6.指定进程运行在哪个CPU上(CPU亲和性)

taskset -c 0 cat /dev/zero > /dev/null &

将一个进程运行在CPU 0号核心上。

将指定CPU和修改优先级组合起来:

taskset -c 0 nice -n -20 cat /dev/zero > /dev/null &

 

===

posted @ 2020-03-24 16:31  风间悠香  阅读(562)  评论(0编辑  收藏  举报