zoukankan      html  css  js  c++  java
  • nginx优化配置

    在使用java web container的时候,我们都在前面挡一层nginx,方便使用各种nginx的功能,设置成代理。 访问特别多的时候发现,服务器上存在大量的TIME_WAIT状态的连接。 经分析,可能是nginx早期版本的upstream还是使用的1.0的短连接代理,java container老是以1.0的方式主动断开进入TIME_WAIT状态,浪费了大量的连接。

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'





    修改配置添加keepalive字段到upstream,nginx 与后端的服务器连接默认是使用的http 1.0,这个大家应该都了解,如果设置为HTTP1.1 复用链接的话就会大大降低了tcp开销,节省系统资源

        upstream nginx_test {
           server 192.168.128.128:8080 weight=5;
           server 192.168.128.132:8080 weight=5;
           keepalive 20;
          # 设置持久连接时间。
        }
         

    同时修改配置添加http1.1声明和header中connection重写。

    server {
        location / {
            proxy_http_version 1.1; #开启对http1.1支持 
            proxy_set_header Connection ""; # 设置Connection为空串,以禁止传递头部到后端,http1.0中默认值Connection: close
            proxy_pass http://nginx_test;
       }
    }

    
    

    修改后TIME_WAIT大量减少十倍以上



    其他优化配置

    worker_processes 8;

    nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。

    开启的工作进程最好与你的硬件CPU个数一致,一味的加大processes,会使得系统的切换开销增大得不偿失

    proxy_connect_timeout 180;
    proxy_read_timeout 180;
    proxy_send_timeout 180; //将nginx与后端的tomcat连接超时,上行超时,下行超时的时间都设置的尽量大,范围大并发的情况下出现502 504.

    压缩打开

    gzip  on;

    events
    {
    use epoll;  #nginx事件处理模型,使用于Linux内核2.6版本及以后的系统
    worker_connections 204800;  #ginx 单个进程的最大并发连接数
    }

    下面是关于系统连接数的优化

    linux 默认值 open files 和 max user processes 为 1024

    #ulimit –u

    1024

    问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024 个用户进程

    使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

    新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files 。因此,需要将其改大。

    解决方法:

    使用 ulimit –n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)

    有如下三种修改方式:

    1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
    2. 在/etc/profile 中增加一行 ulimit -SHn 65535
    3. 在/etc/security/limits.conf 最后增加:

    * soft nofile 65535
    * hard nofile 65535
    * soft nproc 65535
    * hard nproc 65535

    具体使用哪种,在 CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果

     # ulimit -n

    65535

     
  • 相关阅读:
    675 对象的引用-浅拷贝-深拷贝
    674 vue3侦听器watch
    673 vue计算属性:缓存,setter和getter
    明明有了promise,为啥还需要async await?
    Js常用数组方法汇总
    一些非常有用的Js单行代码
    Js获取验证码倒计时
    前端截取字符串:JS截取字符串之substring、substr和slice详解
    javascript全局变量与局部变量
    JS实现快速排序算法
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5984593.html
Copyright © 2011-2022 走看看