• 前端
  • JS
  • CSS
  • HTML
  • Mysql
  • Linux
  • SVN
  • 环境uedbet官网手机版最新
  • uedbet西甲体育投注详解
  • MAC_BOOK
  • 算法
  • nginx优化uedbet官网手机版最新
    By skyshappiness Posted 2017-12-03 13:39:53 In

    一、背景

        随着访问量的逐步上升,需要榨干单一服务器的性能,达到利益最大化

    二、解决方案

        1)、linux 系统优化:

            nginx 每访问完一个文件后,linux系统将会对它的 Access,即访问时间进行修改
            /dev/sdb1 /data ext3 defaults,noatime,nodiratime 0 0
            要挂载的对象 挂载目录 系统类型 文件系统访问权限,禁止修改访问时间 开机后是否检测 出问题后是否转储

        2)、优化资源限制
            ulimit -n 查询单个用户对文件描述符的限制,即打开文件的个数,默认值为 1024
            ulimit -u 查询单个用户最多拥有的进程数,即一个用户能打开的最大进程数量,默认8040
            vi /etc/security/limits.conf
            soft nofile 65535
            hard nofile 65535
            soft nproc 65535
            hard nproc 65535
            重启系统后生效

        3)、优化内核TCP选项
            修改以下Linux内核参数(vi /etc/sysctl.conf):
            net.ipv4.tcp_max_tw_buckets = 6000 //设置 timewait 的值,默认:180000
            net.ipv4.ip_local_port_range = 1024 65000 //设置系统允许打开的端口范围
            net.ipv4.tcp_tw_recycle = 1 //设置是否启用 timewait 快速回收
            net.ipv4.tcp_tw_reuse = 1 //设置是否开启重新使用,即允许将 TIME-WAIT sockets 重新用于新的 TCP 连接
            net.ipv4.tcp_syncookies = 1 //设置是否开启 SYN Cookies,如果启用该功能,那么当出现 SYN等待队列溢出时,则使用cookie处理
            net.core.somaxconn = 262144 //web应用中listen函数的backlog默认会将内核参数的 net.core.somaxconn限制到128,而NGINX_LISTEN_BACKLOG默认为 511,所以必须要调整这个值
            net.core.netdev_max_backlog = 262144 //设置被输送到队列数据包的最大数目,在网卡接收数据包的速率比内核处理数据包的速率快时,那么就会出现排队现象,此参数即用来设置队列的大小
            net.ipv4.tcp_max_orphans = 262144 //设置Linux能够处理不属于任何进程的套接字数量(“孤儿”进程),在快速、大量的连接中这种进程会很多,因此要适当的设置改参数,如果这种孤儿进程套接字数量大于指定的值,那么在使用 dmesg 查看时,会出现 too many of orphaned sockets 的警告
            net.ipv4.tcp_max_syn_backlog = 262144 //用于记录尚未收到客户端确认信息的连接请求的最大值
            net.ipv4.tcp_timestamps = 0 //设置使用时间戳作为序列号,通过这样的设置可以避免序列号被重复使用。在高速、高并发环境中,这种情况是存在的,因此通过时间戳能够让这些被看作是异常的数据包被内核接收。参数为0,代表关闭。
            net.ipv4.tcp_synack_retries = 1 //设置 SYN 重试次数,在 TCP 的3次握手中的第2次握手,内核需要发送一个回应前面一个 SYN 的 ACK 的SYN,即 为了打开对方的连接,内核发出的 SYN 的次数。减小该参数的值有利于避免 DDos 攻击。
            net.ipv4.tcp_syn_retries = 1 //设置内核放弃建立连接之前发送 SYN 包的数量
            net.ipv4.tcp_fin_timeout = 1 //如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外宕机。可以按此设置,但即便是一个轻载的 web 服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2 的危险性比 FIN-WAIT-1 要小,因为FIN-WAIT-2最多只消耗 1.5KB 内存,但是生存周期要长一些。
            net.ipv4.tcp_keepalive_time = 30 //设置 TCP 发送 keepalive 消息的频度

        4)、关闭不必要的日志记录(按照级别选择)

        5)、使用 epoll

        6)、服务uedbet官网手机版最新优化
            worker_connections 65535
            keepalive_timeout 60
            client_header_buffer_size 8K
            worker_rlimit_nofile 65535

        7)、内存使用优化(TCMalloc)
            如果是64位系统,需要优先安装 libunwind : wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.2.tar.gz
            tar -zxvf libunwind-1.2.tar.gz
            cd libunwind....
            CFLAGS=-fPIC ./configure
            make CFLAGS=-fPIC
            make CFLAGS=-fPIC install
            在安装 google-perftools 时还需要添加 --enable-frame-pointers 选项
            安装 google-perftools : wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.6.1/gperftools-2.6.1.tar.gz
            tar -zxvf google-perftools-.....tar.gz
            cd google.....
            ./configure --prefix=/usr/local/google-perftools
            make;make install;
            安装 Nginx 时添加选项: --with-google_perftools_module
            添加粗体uedbet官网手机版最新项:
            events{}
            google_perftools_profiles /tmp/tcmalloc
            http{}
            检查uedbet西甲体育投注: lsof -n | grep tcmalloc
            nginx 11746 nobody 10w REG 253,0 0 11850490 /tmp/tcmalloc.11746 //代表生效

        8)、针对下载限制流量:
            server{
                 limit_rate_after 3m;
                 limit_rate 512K;
            }

        9)、限制用户并发连接数
            http{
                limit_conn_zone $binary_remote_addr zone=perip:10m; //存储会话状态
           }
           server{
               limit_conn perip 1; //限制并发数为1

           }


    附:个人单机部分uedbet官网手机版最新方案


    user  nginx;                                    #uedbet官网手机版最新用户

    worker_processes  1;                            #允许进程数cpu * 核数 或者一般为 4/8,默认uedbet官网手机版最新 1

    error_log  /var/log/nginx/error.log;            #错误日志 error PATH [ debug | info | notice | warn | error | crit ]

    #error_log  logs/error.log;

    #error_log  logs/error.log  notice;

    #error_log  logs/error.log  info;

    #pid        logs/nginx.pid;

    pid        /var/run/nginx.pid;                  #进程号存放位置

    worker_rlimit_nofile 65535;                     #一个nginx进程打开的最多文件描述符数目

    events {

        use epoll;                                  #使用哪种事件模型:nginx 编译时 对内核版本高于 2.6.18的版本

        multi_accept on;                            #nginx得到一个新连接时,接收尽可能多的连接

        worker_connections  65535;                  #worker进程最大打开连接数ulimit -n

    }

    http {

        client_body_timeout 1s;                     #用户请求体超时时间

        client_max_body_size 12m;                   #判断请求体 Content-Length来判断请求体大小是否超过uedbet官网手机版最新值

        include       mime.types;                   #引入MIME类型

        default_type  application/octet-stream;     #设置默认MIME类型

        server_tokens off;                          #关闭在错误页面以及服务器头部输出nginx 版本信息

        log_format  main  '$remote_addr - $uri - $remote_user [$time_local] "$request" '

                          '$status $body_bytes_sent "$http_referer" '

                          '"$http_user_agent" "$http_x_forwarded_for"';                             #日志格式

        #access_log  logs/access.log  main;

        access_log  /var/log/nginx/access.log  main;                                                #请求日志

        sendfile        on;                                                                         #是否开启高效文件传输模式

        sendfile_max_chunk 100k;                                                                    #每个进程每次调用传输数量的值不能大于设定值

        tcp_nopush      on;                                                                         #告诉nginx在一个数据包里发送所有头文件,而不是一个一个发送,仅对 sendfile 有效

        #keepalive_timeout  0;

        keepalive_timeout  65 20;                                                                   #设置与客户端长连接的超时时间

        limit_req_log_level warn;                                                                   #设置延时消息日志级别

        limit_req_zone  $binary_remote_addr zone=reqPerIp:10m rate=5r/s;                            #设置请求地址会话存储区域

        limit_conn_zone $binary_remote_addr zone=perip:10m;                                         #储存会话状态,用于限制用户并发连接数

        #gzipuedbet官网手机版最新;

        gzip on;

        gzip_http_version 1.0;                                                                      #对指定的HTTP请求协议版本进行压缩

        gzip_disable "MSIE [1-6].";                                                                 #对一些特定的用户代理不使用压缩

        gzip_types   text/plain   application/x-javascript   text/css   text/javascriptimage/jpeg image/gif image/png;

        gzip_min_length 1024;                                                                       #设置响应体的最小长度

        gzip_comp_level 3;                                                                          #设定压缩级别1-9;1-最小压缩率,最快;9-最大压缩率,最慢,占用CPU资源最大

        gzip_vary on;                                                                               #设定是否响应数据包添加 Vary:Accept-Encoding HTTP 头(header)

        # Load config files from the /etc/nginx/conf.d directory

        # The default server is in conf.d/default.conf

        include /etc/nginx/conf.d/*.conf;

    }






    友情链接
    联系方式
  • 邮箱 / E-mail:121388038@qq.com