优先级专题


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师
个人网站:www.zhanghehe.cn
笔者微信:zhanghe15069028807,现居济南历下区
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-


优先级专题

概述

linux是一个比较有意思的系统,里面有很多地方体现了贴进人性的一面,比如在centos6当中,在free -m的时候,系统给用户提供了两种视角:系统视角和应用视角的方式来观察系统当前的内存用量;再比如在优先级这里面,也是提供了两套,一套我称做是理性,理性就是固定死的,进程本身的优先级是多少就是多少,轮到谁登场(登上cpu)就是谁,进程本身不能更改,不能拒绝;还有一套我称做是感性优先级,就是进程可以选项明明到自己登场(登上cpu)时放弃登场的权利,而谦让给其它进程,注意进程可以选项降低自己的优先级暂时放弃登场的权利,但是不能提高自己的优先级去争抢。

linux的优先级分为两套

  • 理性:priority

  • 感性:nice

Priority

linux当中进程的优先级范围是:0-139

1--99:实时优先级,越大优先级越高,一般不用我们调整。

100--139:静态优先级,数字越小优先级越高,我们一般调整的是这个,一共有40到priority值。

内核把cpu等待运行的进程放到140个队列当中,每一个队列即对应一个优先级,当cpu上当前进程运行完成之后,就直接根据队列的排序去队列里面取进程,这样无论是多少个进程,内核实际在扫描时只会扫描140个队列。

将要运行的队列是140队,那你有没有想过?那些已经运行完成的进程放到何处?其实还一套队列,同时也是140个队列,用于存放已经运行完成的进程状态,当第一套队列里面的进程用运行完成之后,就把第二套队列里面的进程当做第一套队列,这样周而复始。

Nice

nice的范围是-20---19,一共39个nice值,你会发现nice值范围与priority的范围是一样的都是40个,而且它们是对应关系,如下:

  • priority:100---139

  • nice :-20---19

在用户空间运行的进程默认的priority是20,对应的nice值也就是0,举个例子:

[root@zabbix ~]# top -p `pgrep mysqld`  
top - 20:41:16 up  2:08,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3324936 total,  2365040 free,   368300 used,   591596 buff/cache
KiB Swap:  3538940 total,  3538940 free,        0 used.  2654428 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
 11045 mysql     20   0 1384160 199104   6748 S   0.0  6.0   0:22.17 mysqld   

假如我们这个当前系统只有mysql在运行,没有其它进程,我们是可以考虑把mysql的优先调小一些,也就是调高一些。

下面演示一个调整优先级的案例:

//通过top命令我们看到mysql的优先级默认是0,所有进程的优先级默认都是0
[root@zabbix ~]# top -p `pgrep mysqld`  
top - 20:41:16 up  2:08,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3324936 total,  2365040 free,   368300 used,   591596 buff/cache
KiB Swap:  3538940 total,  3538940 free,        0 used.  2654428 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
 11045 mysql     20   0 1384160 199104   6748 S   0.0  6.0   0:22.17 mysqld            // 按r键,效果如下:
PID to renice [default pid = 11045] 11045    #输入要调整进程的PID号,回车之后再输入10                                   
11045 mysql     20   0 1384160 199104   6748 S   0.0  6.0   0:22.52 mysqld  
//效果如下图,优先级就变成10了

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                     
 11045 mysql     30  10 1384160 199104   6748 S   0.3  6.0   0:22.89 mysqld
posted @ 2020-04-06 10:12  张贺贺呀  阅读(284)  评论(0编辑  收藏  举报