Linux教程之Nginx的并发连接数和连接状态查询

发布时间 - 2017-08-22 00:00:00    点击率:

linux下查看nginx等的并发连接数和连接状态。

1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: 

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

或者:

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'返回结果一般如下: 

LAST_ACK 5 (正在等待处理的请求数)

SYN_RECV 30 

ESTABLISHED 1597 (正常数据传输状态) 

FIN_WAIT1 51 

FIN_WAIT2 504 

TIME_WAIT 1057 (处理完毕,等待超时结束的请求数) 

其他参数说明: 

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

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

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

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

ESTABLISHED:正常数据传输状态 

FIN_WAIT1:应用说它已经完成 

FIN_WAIT2:另一边已同意释放 

ITMED_WAIT:等待所有分组死掉 

CLOSING:两边同时尝试关闭 

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

LAST_ACK:等待所有分组死掉 

常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。

TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。  

TIME_WAIT 

TIME_WAIT 是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。  由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接

CLOSE_WAIT

CLOSE_WAIT是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。

为什么需要 TIME_WAIT 状态?

假设最终的ACK丢失,server将重发FIN,client必须维护TCP状态信息以便可以重发最终的ACK,否则会发送RST,结果server认为发生错误。TCP实现必须可靠地终止连接的两个方向(全双工关闭),client必须进入 TIME_WAIT 状态,因为client可能面 临重发最终ACK的情形。

为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间?

如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被 丢弃。建立第二个连接的时候,不会混淆。

 TIME_WAIT 和CLOSE_WAIT状态socket过多

如果服务器出了异常,百分之八九十都是下面两种情况:

1.服务器保持了大量TIME_WAIT状态

2.服务器保持了大量CLOSE_WAIT状态,简单来说CLOSE_WAIT数目过大是由于被动关闭连接处理不当导致的。

因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常,Tomcat崩溃。


# linux  # nginx  # 第二个  # 第一个  # 句柄  # 两种  # 重发  # 死掉  # 都是  # 出了  # 很有  # 就不能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  海南网站制作公司有哪些,海口网是哪家的?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何快速搭建高效香港服务器网站?  jQuery中的100个技巧汇总  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  详解vue.js组件化开发实践  如何在阿里云购买域名并搭建网站?  Laravel怎么在Controller之外的地方验证数据  如何在腾讯云服务器快速搭建个人网站?  如何在Tomcat中配置并部署网站项目?  百度浏览器如何管理插件 百度浏览器插件管理方法  独立制作一个网站多少钱,建立网站需要花多少钱?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  浅述节点的创建及常见功能的实现  简单实现Android文件上传  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel观察者模式如何使用_Laravel Model Observer配置  详解jQuery中的事件  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel怎么清理缓存_Laravel optimize clear命令详解  java ZXing生成二维码及条码实例分享  Laravel Session怎么存储_Laravel Session驱动配置详解  Java解压缩zip - 解压缩多个文件或文件夹实例  Android仿QQ列表左滑删除操作  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  nginx修改上传文件大小限制的方法  如何确认建站备案号应放置的具体位置?  linux top下的 minerd 木马清除方法  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  详解Huffman编码算法之Java实现  香港服务器建站指南:免备案优势与SEO优化技巧全解析  JS经典正则表达式笔试题汇总  JavaScript常见的五种数组去重的方式  音乐网站服务器如何优化API响应速度?  如何基于PHP生成高效IDC网络公司建站源码?  手机网站制作与建设方案,手机网站如何建设?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  jQuery 常见小例汇总  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何在IIS管理器中快速创建并配置网站?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  如何利用DOS批处理实现定时关机操作详解  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?