• CPU-内存-IO-网络调优


    一、关于CPU 中央处理器调优

    1、 CPU处理方式:

    1. 批处理,顺序处理请求。(切换次数少,吞吐量大)
    2. 分时处理。(如同"独占",吞吐量小)(时间片,把请求分为一个一个的时间片,一片一片的分给CPU处理)我们现在使用x86就是这种架构
    3. 实时处理

    例如:

    • 批处理——以前的大型机(Mainframe)上所采用的系统,需要把一批程序事先写好(打孔纸带),然后计算得出结果
    • 分时——现在流行的PC机和服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同的运算请求
    • 实时——一般用于单片机上,比如电梯的上下控制,对于按键等动作要求进行实时处理

    2、 查看CPU一分钟有多个切换多少次

    #查看内核一秒钟中断CPU次数
    [root@xuegod70 ~]# grep HZ /boot/config-3.10.0-693.el7.x86_64 
    CONFIG_NO_HZ_COMMON=y
    # CONFIG_HZ_PERIODIC is not set
    # CONFIG_NO_HZ_IDLE is not set
    CONFIG_NO_HZ_FULL=y
    # CONFIG_NO_HZ_FULL_ALL is not set
    CONFIG_NO_HZ=y
    # CONFIG_RCU_FAST_NO_HZ is not set
    # CONFIG_HZ_100 is not set
    # CONFIG_HZ_250 is not set
    # CONFIG_HZ_300 is not set
    CONFIG_HZ_1000=y
    CONFIG_HZ=1000         #1秒钟有1000次中断
    CONFIG_MACHZ_WDT=m
    注: 此文件/boot/config-3.10.0-693.el7.x86_64 是编译内核的参数文件
    

    3、调整进程优先级使用更多CPU  

    调整进程nice值,让进程使用更多的CPU
    优先级控制:
      nice值 #范围, -20 ~ 19 越小优先级越高 普通用户0-19
      nice
    作用:以什么优先级运行进程 。默认优先级是0
    语法: nice -n 优先级数字 命令
    例:

    [root@xuegod63 ~]# nice -n -5 vim a.txt   # vim进程以-5级别运行
    查看:
    [root@xuegod63 ~]# ps -axu | grep a.txt
    [root@xuegod63 ~]# ps -axu | grep a.txt
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root     24318  0.0  0.2 143624  3280 pts/4    S+   17:00   0:00 vim b.txt
    [root@xuegod63 ~]# top -p   24318
    
     PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                        
    24219 root      15  -5  140m 3336 2200 S  0.0  0.3   0:00.08 vim   
    检测一下范围: -20 - 19
    renice  #修改正在运行的进程的优先级
    #renice -n 5 PID   #修改进程优先级
    
    [root@xuegod63 ~]# renice -n -21 24219
    24219: old priority -20, new priority -20
    

    4 、CPU亲和力  

    taskset 作用:在多核的情况下,可以认为指定一个进程在哪颗CPU上执行程序,减少进程在不同CPU之前切换的开销。

    安装:
    [root@xuegod63 ~]# rpm -qf `which taskset `
    util-linux-2.23.2-43.el7.x86_64
    

    语法: taskset -c N 命令
    例1:本机是4核CPU ,指定vim命令在第一个CPU上运行

    [root@xuegod63 ~]# taskset -c 0 vim a.txt    #1号CPU ID是0
    [root@xuegod63 ~]# ps -axu | grep vim
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      2614  1.3  0.2 143696  3332 pts/0    S+   18:39   0:00 vim a.txt
    [root@xuegod63 ~]# taskset -p  2614    #  -p 要查看的进程ID
    pid 2614's current affinity mask: 1    #CPU亲和力掩码,1代表第一个CPU核心
    

    例2:查sshd进程运行在哪几个CPU上  

    [root@xuegod63 ~]# ps -axu | grep sshd
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      2030  0.0  0.0  64068  1140 ?        Ss   18:26   0:00 /usr/sbin/sshd
     [root@xuegod63 ~]# taskset -p 2030
    pid 2030's current affinity mask: f   #说明sshd在4颗CPU上随机进行切换。
    
    说明: 
    	Cpu ID 号码,对应的16进制数为: 
    	CPU ID:               7      6      5      4      3      2      1      0
    	对应的10数为:          128    64     32     16      8      4      2      1
    	当前, 我的系统中cpu ID 的为(0,1,2,3) 
    	pid 2030's current affinity mask: f 的值为cpu ID 16进制的值的和(1+2+4+8=f),转换成二进制为:1111 
    	这个说明了(pid=2030)的这个sshd进程工作在cpu ID 分别为0,1,2,3这个四个cpu上面的切换。
    注: 我们的CPU是4核心,所以taskset -c后可以跟: 0,1,2,3
    
    例:指定vim c.txt  程序运行在第2和第4个CPU上
    [root@xuegod63 ~]#  taskset -c 1,3 vim b.txt
    [root@xuegod63 ~]#  ps -axu | grep vim
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    root      6314  1.5  0.2 143612  3280 pts/1    S+   14:41   0:00 vim b.txt
    root      6317  0.0  0.0 103300   848 pts/2    S+   14:41   0:00 grep vim
    [root@xuegod63 ~]# taskset -p    6314 
    pid 6314's current affinity mask: a   
    # a为十进制的10=2+8   
    注:在哪个CPU上运行,那一位就赋为1 。 
    

    5、CPU 性能监控  

      理解运行队列,利用率,上下文切换对怎样CPU 性能最优化之间的关系,早期提及到性能是相对于基准线数据的,在一些系统中,通常预期所达到的性能包括:
      Run Queues ­ 每个处理器应该运行队列不超过1­3 个线程.
    例如: 一个双核处理器应该运行队列不要超过6 个
    注:有两个特殊的进程永远在运行队列中待着:当前进程和空进程idle。

      

      

    ================================================================================== = 黑发不知勤学早,白首方悔读书迟。 --颜真卿《劝学》
  • 相关阅读:
    iphone界面详解
    Spring jdbcTemplate.queryForInt(sql)的奇怪问题,呵呵
    BCP 高效批量导入
    eclipse中javascript显示为乱码的解决办法
    spring jdbcTemplate返回RS
    Spring IOC DI 形象理解
    MOSS 2007 文档库事件处理
    showModalDialog和showModelessDialog使用心得
    XMLHTTP.open权限不够的解决
    体现JAVA中的面向对象思想,接口(抽象类)的用处 :饲养员给动物喂食物
  • 原文地址:https://www.cnblogs.com/happy1983/p/9274638.html
Copyright © 2020-2023  润新知