设为首页 收藏本站
查看: 1434|回复: 0

[经验分享] [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量"TIME_WAIT"状态的线程”的问题分析解决

[复制链接]

尚未签到

发表于 2016-12-29 06:39:26 | 显示全部楼层 |阅读模式
近期,线上Nginx服务器的TPS未超过100,但其Writing、Active连接数有时却超过了300。因为服务对响应时间要求较高,同时每个调用方使用的IP地址有限(即总的不同的连接地址有限),所以使用HTTPs长连接技术。(HTTP长连接与短连接)
 
问题现象:使用"sudo netstat -antp | grep 80"发现,存在大量的"TIME_WAIT" socket等待中断请求确认的线程(8000+)
原因:使用Wireshark分析tcpdump.txt发现,eleme使用短连接请求(非长连接,Keep-Alive),而服务器端使用的却是长连接。eleme每次请求都会新开一个连接,请求完之后就把该连接关闭了;而服务端线程在处理完请求后却一直打开等待着下一个请求的到来(5min最长存活时间),同时对新的请求又需要新建一个线程,致使大量线程出现"TIME_WAIT"现象,所有请求处理线程都等待5min后才会被服务器关闭。

解决方法:让eleme改为长连接请求
[参考]

  • Apache服务器的 FIN_WAIT1 过多 TIME_WAIT 过多问题解决
  • UNIX / Linux: 10 Netstat Command Examples
  • netstat命令详解 (10 Netstat Command Examples 中文版)
  • netstat(8) - Print network connections, routing tables, interface statistics - Linux manual page
 
[RFC] 服务端无状态的传输层安全(TLS)会话恢复协议
无状态TLS会话恢复机制概述
先说说TLS会话恢复机制的出现是为了解决什么问题?

【背景】

SSL会话恢复的原理是在服务端缓存所有的session,客户端之后在每次和服务端握手时通过Session ID完成session状态恢复。这种机制对服务端有如下挑战:

 
1. 如果是在本机缓存session,必须保证同一个客户端的请求要落到同一台服务器,这无疑给前端负载均衡策略增大了压力。
2. 如果是为一个集群单独建立一个shared的session cache,同样也增加了请求的处理环节,并增加了系统的成本(都是money啊)。
 
之所以如此纠结是因为SSL觉得session信息必须放在服务端缓存,而SSL的替代者TLS则提供了新的选择,服务端无状态的会话恢复机制
【原理】

       简单的说,就是服务端不再缓存session的状态信息,而是将其加密并分发和转存到客户端,缓存在客户端的session状态信息叫Ticket(船票,你懂得)。客户端每次请求时同时发送ticket到服务端,服务端将其解密并reuse之前的session状态信息。

[参考]


  • 服务端无状态的TLS session resumption机制 - 淘宝千石
  • Optimizing for TLS - Chapter 4. Transport Layer Security (TLS)
  • TLS优化 - Optimizing for TLS
 

1. 触发新的会话票证的完整握手的消息流

 

DSC0000.png

 
真实的网络数据包:
DSC0001.png

 
“Message Flow for Full Handshake Issuing New Session Ticket”适合HTTPS短连接场景。
 
3. 不触发新的会话票证的服务器完成完整握手的消息流
DSC0002.png

 
真实的网络数据包:
DSC0003.png

 
“Message Flow for Server Completing Full Handshake Without Issuing New Session Ticket”适合HTTPS长连接场景。
 
待解决“存在TCP重复ACK和丢包现象”:
DSC0004.png
 
参考
[PDF] Transport Layer Security (TLS) Session Resumption without Server-Side State
RFC 5077
RFC 4507
 
 
玩的开心!^_^

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-320741-1-1.html 上篇帖子: 开机启动设置 下篇帖子: 非常推荐:搭建一个大型网站架构的实验环境(FreeBsd+Nginx+Squid+Apache)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表