zoukankan      html  css  js  c++  java
  • [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 &

    ===

  • 相关阅读:
    .net开发微信公众号(2)-验证服务器地址
    [广度遍历和深度遍历]聊聊算法和设计模式
    DDD领域驱动设计之聚合、实体、值对象
    DDD领域驱动设计之运用层代码
    DDD领域驱动设计之领域服务
    DDD领域驱动设计之领域基础设施层
    DDD领域驱动设计实践篇之如何提取模型
    Docker最全教程——从理论到实战(七)
    Docker最全教程——从理论到实战(六)
    Docker最全教程——从理论到实战(五)
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12543685.html
Copyright © 2011-2022 走看看