抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

[toc]

进程调度

OS:硬件抽象,虚拟计算机
    system call 
CPU: time slice
    获得CPU权限的优先级,有些进程的优先级是可以被提高的
调度器(本身也是个程序): CFS Big O
        O(1) 一个算法的时间复杂度
        0-139
        0-99
        100-139:
            nice
Memory:
    虚拟地址空间
    PAE:物理地址扩 32bits,寻址的物理空间是4G,4bits是额外引入的,所以被称为PAE技术(64G)
    也就是说它的线性地址空间依然为4G 

    MySQL:单进程多线程
        可以使用2.7G左右,因此使用PAE技术对MySQL没有技术,因此使用MySQL服务时,建议使用64位的
    page frame: 分页技术 
    物理地址中的内存空间,被划分成了多个页面空间,都被组织成为多个页面形势
    从页面到页框完成映射的
    一个进程读取数据时,首先需要把数据载入到内存中。遇到经常被调用的数据时,可以配置缓存
    如果缓存不断的命中,则说明性能可以不断的提高,将频繁被访问数据放到CPU缓存中
    对于CPU来说,CPU的缓存对提高CPU的性能是至关重要的
    缓存空间通常是按倍相差的
    TLB 转换后元缓存器
     page frame:
     huge page: 使用大页,来提升TLB的命中率
     0000
     0001
     0101
     1111
     cpu 1,3

     两中拆中方法,拿时间换空间,拿空间换时间 
     较专业的服务器上会有NUMA的结构,非一致内存访问,NUMA结构的前题是,要有多颗CPU 
     将进程和CPU完成亲和性绑定,进程命中CPU缓存的命中率,将会变的很高

CPU调优操作

# 查看当前进和运行在哪颗CPU
# ps axo psr,comm,pid
# cat /proc/cpuinfo
# 定义进程号为 11215的进程绑定在第四颗CPU上
# taskset -p -c 3 11215 (为个命令的格式比较诡异) 
# taskset -p cpu1,cpu2,... pid 
# vim /boot/grup/grub.conf kernel 行加上 isol = 2,3
# cat /proc/interrupts # 通常应该把0号隔离出来,离给内核使用
# ls /proc/irq/0/
# cat /proc/irq/0/smp_affinity 
ffffffff,ffffffff  表示任意CPU

# echo 1 > /proc/irq/32/smp_affinity
# cat /proc/irq/32/smp_affinity
# cat 
# 对于生产来说,越简单,越标准会好
# 压榨系统资源,会造成系统不稳定的,不到万不得已,不建议这样做的
# nice, renice 经常用到的进程优先级的调整

定义中断 smp affinityy:

# echo cpunumber ,.. > /proc/irq/#/smp_affinity
# 这里使用的cpu应该为isoicpus中定义CPU集合之外的其它CPU
# numa,numactl,numad 尽可能把进程绑定在单颗CPU上
# 对同一个进程来讲,可能适用的调度器有多个,有其优先级较高的调度来器来调度
# SCHED_FIFO [1-99] 
    chrt -f [1-99] /path/to/program arguments
# SCHED_RR  
    chrt -f [1-99] /path/to/program arguments
# SCHED_NORMAL (100-139)
进程的调度类别: 
    SCHEd_FIFO, SCHED_RR:real-time 

    SCHED_NORMAL, SCHED_OTHER: 100-139
        nice,renice (对于已启动的进程使用renice启动)
建议使用CPU Utilization工具:
    htop,dstat,glances,sar
    w,uptime, vmstat 1 5  
# sar -P all 1
# iostat -c 1 2 
# sysdig
/proc,/sys

DMA: 直接内存访问

CPU跟外部IO设备交互的方式:
    poll:轮询,忙等待
    中断:
CPU: 调优
    cpu affinity 
    优先级调整
        cgroups,
内存:
    overcommit_memory
    msg 
    shm

补充nginx 优化加速

给Nginx上 ngx_http_gzip_module 这个模块;
用 nginx -V 命令查看 configure arguments 是否有
没有的话需要编译加载这个模块

# vim /usr/local/nginx/nginx.conf
# 在 httpd 段中加入以下内容
gzip on;
#该指令用于开启或关闭gzip模块(on/off)

gzip_buffers 16 8k;
#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。16 8k代表以8k为单位,安装原始数据大小以8k为单位的16倍申请内存

gzip_comp_level 6;
#gzip压缩比,数值范围是1-9,1压缩比最小但处理速度最快,9压缩比最大但处理速度最慢

gzip_http_version 1.1;
#识别http的协议版本

gzip_min_length 256;
#设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。这里我设置了为256

gzip_proxied any;
#这里设置无论header头是怎么样,都是无条件启用压缩

gzip_vary on;
#在http header中添加Vary: Accept-Encoding ,给代理服务器用的

gzip_types
    text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
    text/javascript application/javascript application/x-javascript
    text/x-json application/json application/x-web-app-manifest+json
    text/css text/plain text/x-component
    font/opentype font/ttf application/x-font-ttf application/vnd.ms-fontobject
    image/x-icon;
#进行压缩的文件类型,这里特别添加了对字体的文件类型

gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#禁用IE 6 gzip

# vim /etc/nginx/conf.d/ssjinyao.conf 
# 在虚拟主机server 段中加入以下内容
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
}

location ~ .*\.(eot|ttf|otf|woff|svg)$ {
    expires 30d;
    access_log off;
}

location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
}

评论