nginx后端应用服务器有大量的tcp连接处于time_wait

2018-12-07 22:21:07
今天发现weblogic上有大量的连接处于time_wait状态,感觉很奇怪。据说是nginx照成的,用tcpdump研究下。

在nginx的服务器上执行

tcpdump -i bond0 -nnA src host 134.96.129.36 and dst host 134.96.129.71 | grep -30 134.96.111.86

nginx后端应用服务器有大量的tcp连接处于time_wait

可以看到nginx在把请求转发到后台weblogic上时候是发送的http头信息中指定使用HTTP/1.0和Connection:close。从这个Connection属性可以知道,nginx让后端weblogic在请求完成后(及响应请求后),直接关闭连接。及weblogic做的主动关闭,所以主动关闭的一方会有大量的time_wait。----http短连接

在浏览器访问,看以看到只要weblogic请求完毕就关闭与nginx的连接,然后进入time_wait状态,time_wait的时间是60秒。

nginx后端应用服务器有大量的tcp连接处于time_wait
请求转码

json={"param":null,"target":"Version"}

-------------------------------------------------------------------------------------------

在nginx的配置中有一个属性指定浏览器发起的连接与nginx保持keepalive的时间 -----http长连接

下面验证该配置是否有用

nginx后端应用服务器有大量的tcp连接处于time_wait
设置keepalive_timeout属性为30秒

在nginx服务器上重复执行如下命令,监听来自ip为85的浏览器请求

netstat -nto | grep 134.96.111.85 | grep 8010 >> abc.txt && date >> abc.txt

此时在浏览器发送请求该

第一次浏览器求情的时间是19:41:48

nginx后端应用服务器有大量的tcp连接处于time_wait
断开连接的时间是19:42:17

nginx后端应用服务器有大量的tcp连接处于time_wait
established的时间是12+17=29秒。其实第一浏览器的请求时间应该往前的。我统计的不准,执行netstat时候晚了,所以刚好实际那应该就是30秒。

---------------------------------------------------------------------------------------------

还可以做下测试,只要在浏览器重复请求web页面,可以发现浏览器与nginx的连接会被重用,这个可以通过

established连接持续的时间可以看出来。---------------这就是所谓的http长连接了

  • 2017-04-02 00:56:36

    php-fpm占用系统资源分析

    由上图分析,可以看出共有602个进程,其中有601个进程休眠了。这好像有点不对劲,内核进程也就80个左右,加上memcached, nginx, mysqld,也不会超出90个。除了这些,剩下的只有php-fpm管理的php-cgi,难道是…?

  • 2017-04-03 14:23:17

    Android Studio --“Cannot resolve symbol” 解决办法

    Android Studio 无法识别同一个 package 里的其他类,将其显示为红色,但是 compile 没有问题。鼠标放上去后显示 “Cannot resolve symbol XXX”,重启 Android Studio,重新 sync gradle,Clean build 都没有用。

  • 2017-04-06 14:59:13

    PHP配置文件详解

    PHP是一个简单易学,功能强大的语言,尤其在Web开发,开发效率高,方便快捷。研究一下php.ini了解PHP相关配置会有好处的,对PHP有更加深入的了解。

  • 2017-04-06 15:00:46

    怎么实时查看mysql当前连接数

    今天有一台mysql服务器突然连接数暴增,并且等待进程全部被锁...因为问题解决不当,导致被骂...OTL 总结:以后要快速定位错误,布置解决方案

  • 2017-04-06 15:07:57

    PHP-FPM不完全指南

    fpm启动后会先读php.ini,然后再读相应的conf配置文件,conf配置可以覆盖php.ini的配置。 启动fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。

  • 2017-04-06 15:11:03

    浅析php-fpm 和 mysql 之间的关系详解

    php-fpm 和 mysql 之间的关系估计不做底层开发应用的是不会去考虑分析它们了,如果是的话我们来看一篇关于php-fpm 和 mysql 之间的关系的教程。