zoukankan      html  css  js  c++  java
  • 优先级专题


    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
    张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、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
    
  • 相关阅读:
    6位密码框js
    总结 清除浮动的四种常见方法
    JS中关于clientWidth offsetWidth scrollWidth 的区别及意义
    字符超过长度将以省略号显示
    如何改变在浏览器上选中字体的颜色
    dev gridcontrol把event事件转换成命令
    gridcontrol datatemplate trigger
    oracle数据库一些用户管理语句
    dev gridcontrol 绑定int型及日期型的列默认当值为0时显示空白及格式化日期显示方式
    c#计算datatable中某一列值的和
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/12640808.html
Copyright © 2011-2022 走看看