Quantcast
Channel: IT社区推荐资讯 - ITIndex.net
Viewing all articles
Browse latest Browse all 15843

更新nginx版本upstream升级http1.1解决多TIME_WAIT问题

$
0
0

以下内容由 [五四陈科学院]提供

前情提要

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

升级前

1
2
3
4
5
6
~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
TIME_WAIT 4554
CLOSE_WAIT 1
SYN_SENT 2
ESTABLISHED 1043
SYN_RECV 1

为了hold这些time_wait状态的连接,可以想象浪费了多少资源。

升级

下载最新稳定版本nginx-1.4.5,编译安装,按下不表。

修改配置添加keepalive字段到upstream。

1
2
3
4
5
upstream backend_abc {
    server   192.168.1.34:8086 weight=1 max_fails=2 fail_timeout=10s;
    server   192.168.1.77:8086 weight=1 max_fails=2 fail_timeout=10s;
    keepalive 16;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
server {
        listen       80;
        ....
  location / {
            proxy_pass         http://backend_abc;
            proxy_http_version 1.1;
            proxy_redirect     off;
            proxy_set_header Connection "";
            ....
  }

    }

升级后

TIME_WAIT大量减少十倍以上! 内存占用降低有待考验。


想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

Viewing all articles
Browse latest Browse all 15843

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>