zoukankan      html  css  js  c++  java
  • Linux 相关优化

    lvs 四层 dr 直接返回给用户
    支持大并发 四层负载均衡 复杂 不能更改端口
    lvs负载均衡 (大并发) NGINX 实现web动静分离 移动和pc分离
    解决 WEB高并发


    mysql优化参数调整
    打开MySQL配置文件my.cnf
    1 back_log参数值:由默认的50修改为500.(每个连接256kb,占用:125M)
    back_log=500
    值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。将会报:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时.
    back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。

    修改系统内核参数,)
    查看mysql 当前系统默认back_log值,命令:
    show variables like 'back_log'; 查看当前数量
    2 改wait_timeout参数值,由默认的8小时,修改为30分钟。(本次不用)
    wait_timeout=1800(单位为妙)MySQL客户端的数据库连接闲置最大时间值
    网站有大量的MySQL链接请求(每个MySQL连接都是要内存资源开销的 ),由于你的程序的原因有大量的连接请求空闲啥事也不干,白白占用内存资源,或者导致MySQL超过最大连接数从来无法新建连接导致“Too many connections”的错误
    3修改max_connections参数值,由默认的151,修改为3000(750M)。
    max_connections=3000
    max_connections是指MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySql会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值
    4修改max_user_connections值,由默认的0,修改为800
    max_user_connections=800 是指每个数据库用户的最大连接
    5修改thread_concurrency值,由目前默认的8,修改为64
    thread_concurrency=64
    thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那thread_concurrency 的应该为4; 2个双核的cpu, thread_concurrency的值应为8
    6default-storage-engine(设置MySQL的默认存储引擎)
    default-storage-engine= InnoDB(设置InnoDB类型(支持实物类型),另外还可以设置MyISAM(读多写少建立引擎)
    二 全局缓存
    动MySQL时就要分配并且总是存在的全局缓存。目前有:key_buffer_size(默认值:402653184,即384M)、innodb_buffer_pool_size(默认值:134217728即:128M)、innodb_additional_mem_pool_size(默认值:8388608即:8M)、innodb_log_buffer_size(默认值:8388608即:8M)、query_cache_size(默认值:33554432即:32M)等五个。总共:560M.
    这些变量值都可以通过命令如:show variables like '变量名';查看到。
    三 局部缓存
    read_buffer_size(默认值:2097144即2M)
    read_buffer_size=4M是MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一

    缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能.
    sort_buffer_size,read_rnd_buffer_size,tmp_table_size 大小的内存空间. 不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。有的是立刻分配成单独的组块。tmp_table_size 可能高达MySQL所能分配给这个操作的最大内存空间
    四 其他缓存
    thread_cache_size (服务器线程缓存)
    table_cache(默认值:512)

    #######################################################
    NGINX优化
    1 worker_processes 1;一般调整到与CPU的颗数相同
    2 优化绑定不同的nginx进程到不同的CPU上
    3 nginx事件处理模型优化
    4 调整nginx单个进程允许的客户端最大连接数
    参数语法:worker_connections number
    默认配置:worker_connections 512
    放置位置:events 标签  
    events {
    worker_connections 1024; #一个worker进程的并发
    }
    总并发= worker_processes* worker_connections
    5 配置nginx worker进程最大打开文件数
    参数语法:worker_rlimit_nofile number
    放置位置:主标签段
    说明:作用是改变worker processes能打开的最大文件数
    worker_rlimit_nofile 65535;
    这各参数受系统文件的最大打开数限制,解决方法:
    [root@admin nginx]# cat /proc/sys/fs/file-max
    8192
    文件系统最大可打开文件数
    [root@admin nginx]# ulimit -n
    1024
    程序限制只能打开1024个文件
    使用# ulimit -n 8192调整一下
    或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx无效)
    6 开启高效文件传输模式
    设置参数 sendfile on;
    sendfile参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘i/o阻塞,提升nginx工作效率。
    http {
      sendfile on; #放在http,server,location都可以
    7 FastCGI相关参数调优
    fastcgi_connect_timeout 240;
    fastcgi_send_timeout 240;
    fastcgi_read_timeout 240;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    #fastcgi_temp_path /data/ngx_fcgi_tmp;
    fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
    8 部署网站程序权限设置
    目录:755
    文件:644
    所有者:root
    cd /application/apache/html/
    chown -R root.root blog
    find ./blog/ -type f|xargs chmod 644
    find ./blog/ -type d|xargs chmod 755
    9. 控制Nginx并发连接数量
      ngx_http_limit_conn_module这个模块用于限制每个定义key值得连接数,特别是单个TP的连接数。
      不是所有的连接数都会被计算。一个符合计数要求的连接是整个请求头已经被读取的连接。
    控制Nginx并发连接数量参数的说明
      1)limit_conn_zone参数:
        语法:limit_conn_zone key zone=name:size;
        上下文:http
        用于设置共享内存区域,key可以是字符串、Nginx自带变量或前两个组合。name为内存区域的名称,size为内存区域的大小。

      2)limit_conn参数
        语法:limit_conn zone number;
        上下文:http、server、location
        用于指定key设置最大连接数。当超时最大连接数时,服务器会返回503报错。

    10. 控制客户端请求Nginx的速率
      ngx_http_limit_req_module模块用于限制每个IP访问每个定义key的请求速率。
    limit_req_zone参数说明如下。
        语法:limit_req_zone key zone=name:size rate=rate;
        上下文:http
        用于设置共享内存区域,key可以是字符串,Nginx自带变量或前两个组合。name为内存区域的名称,size为内存区域的大小,rate为速率,单位为r/s,每秒一个请求。
      limit_req参数说明如下:
        语法:limit_req zone=name [burst-number] [nobelay]
        上下文:http、server、location
        这里运用了令牌桶原理,burst=num,一个有num快令牌,令牌发完后,多出来的那些请求就会返回503。
      nodelay默认在不超过burst值得前提下会排队等待处理,如果使用此参数,就会处理完num+1次请求,剩余的请求为超时,返回503。
    ###########################################################
    修改Linux内核参数提高Nginx服务器在高的时候的性能
    TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数量

    vi /etc/sysctl.conf
      增加以下几行:
      引用
      net.ipv4.tcp_fin_timeout = 30
      net.ipv4.tcp_keepalive_time = 1200
      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_tw_recycle = 1
      net.ipv4.ip_local_port_range = 1024 65000
      net.ipv4.tcp_max_syn_backlog = 8192
      net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
      net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
      net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
      net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
      net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
      net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
      net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
      net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
    更改linux内核参数后,立即生效的命令!
      /sbin/sysctl -p
    Nginx优化
      使用FastCGI 缓存
      fastcgi_cache TEST
      开启FastCGI 缓存并且为其制定一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。
      fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
      keys_zone=TEST:10m
      inactive=5m;
      这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。

  • 相关阅读:
    20180610模拟赛T3——书本整理
    20180610模拟赛T1——脱离地牢
    20180606模拟赛T4——数学游戏
    软工2019作业一
    期末总结
    <英狼>--团队作业3 王者光耀--终极版
    团队作业3--王者光耀(体会)
    <英狼> 团队作业2--王者光耀
    王者光耀--个人任务
    团队-----英狼
  • 原文地址:https://www.cnblogs.com/zhanzhan/p/9085358.html
Copyright © 2011-2022 走看看