清除nginx连接数TIME_WAIT

系统环境:

操作系统:centos7

nginx版本:1.12

事件起因:

由于环境是部署在阿里云上的,有添加云监控报警,最近一直在报警:提示nginx的tcp连接数已经超出设置范围,然后实际上没有很多的连接,于是开启了排查解决之旅。

排查工作:

        本机的nginx环境是用来做代理和负载的。

1、想起nginx有个长连接的配置参数,是不是配置时间太长导致连接没有释放导致的呢?

        清除nginx连接数TIME_WAIT_第1张图片

 结果发现,最大连接数设置了10240,超时时间为65s,感觉没什么问题呀。

2、查看nginx的连接数,看看是如何导致的。

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

  1. CLOSED:无连接是活动的或正在进行

  2. LISTEN:服务器在等待进入呼叫

  3. SYN_RECV:一个连接请求已经到达,等待确认

  4. SYN_SENT:应用已经开始,打开一个连接

  5. ESTABLISHED:正常数据传输状态

  6. FIN_WAIT1:应用说它已经完成

  7. FIN_WAIT2:另一边已同意释放

  8. ITMED_WAIT:等待所有分组死掉

  9. CLOSING:两边同时尝试关闭

  10. TIME_WAIT:另一边已初始化一个释放

  11. LAST_ACK:等待所有分组死掉

 结果发现TIME_WAIT的数量很大,想办法清理一下,网上找找解决办法吧。

网上千篇一律的教程:

网上找了一圈,发现大多数都是一个办法,就是下面这个:

说是nginx在跟后端服务器的连接方式一般都是HTTP1.0,但是HTTP1.0不支持HTTP keepalive,HTTP1.1支持,所以需要在nginx配置文件中指定成HTTP1.1,然后keepalive的时长才会生效,那就试一下吧。

  1. http{

  2. upstream www{

  3. keepalive 65;                                                     # 必须配置,建议50-100之间

  4. }

  5. server {

  6. location / {

  7. proxy_pass http://www

  8. proxy_http_version 1.1;                                   # 后端配置支持HTTP1.1,必须配

  9. proxy_set_header Connection ;                   # 后端配置支持HTTP1.1 ,必须配置。

  10. }

  11. }

  12. }

 修改完配置文件之后,由于不能重启线上的nginx环境,只能先加载下配置文件试一下

/usr/local/nginx/sbin/nginx -t                                        #测试配置文件是否存在问题

/usr/local/nginx/sbin/nginx -s reload                            #加载nginx的配置文件

 上面一顿操作下来,满心欢喜的去查看连接数,结果丝毫没有变化,可能这个方法不适合我的环境吧。没有办法,只能继续探索,下面就是我的实际解决办法。

实际解决办法:

修改linux的内核参数,增加下面的配置参数。

 vim /etc/sysctl.conf

net.ipv4.tcp_syncookies = 1       #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN×××,默认为0,表示关闭
net.ipv4.tcp_tw_reuse=1           #让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍 默认是0
net.ipv4.tcp_tw_recycle=1         #让TIME_WAIT尽快回收 默认0
net.ipv4.tcp_fin_timeout=65        #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

 sysctl -p                        #加载内核文件,快速生效。

 然后满心欢喜的查看阿里云上的监控,跟过山车一样就下来了。

清除nginx连接数TIME_WAIT_第2张图片

注: 

以上为本人实际搭建过程中的经验总结,如果有什么问题,可以在评论区留言,大家一起探讨进步!

 

 

你可能感兴趣的:(nginx,nginx,nginx反向代理,linux,运维)