`

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

阅读更多

近期,线上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改为长连接请求

[参考]

  1. Apache服务器的 FIN_WAIT1 过多 TIME_WAIT 过多问题解决
  2. UNIX / Linux: 10 Netstat Command Examples
  3. netstat命令详解 (10 Netstat Command Examples 中文版)
  4. 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状态信息。

[参考]

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

 

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

 

 

真实的网络数据包:

 

“Message Flow for Full Handshake Issuing New Session Ticket”适合HTTPS短连接场景。

 

3. 不触发新的会话票证的服务器完成完整握手的消息流

 

真实的网络数据包:

 

“Message Flow for Server Completing Full Handshake Without Issuing New Session Ticket”适合HTTPS长连接场景。

 

待解决“存在TCP重复ACK和丢包现象”:

 

参考

[PDF] Transport Layer Security (TLS) Session Resumption without Server-Side State

RFC 5077

RFC 4507

 

 

玩的开心!^_^

  • 大小: 70.8 KB
  • 大小: 165.9 KB
  • 大小: 66.4 KB
  • 大小: 152.7 KB
  • 大小: 192 KB
0
0
分享到:
评论

相关推荐

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

    本文讨论了在线上环境中,服务端长连接和客户端短连接配置不当导致Nginx服务器产生大量“TIME_WAIT”状态线程的问题,同时提供了问题的分析和解决方法。本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别...

    nginx+php产生大量TIME_WAIT连接解决办法1

    1. Nginx作为负载均衡器,与PHP-FPM通信时通常采用短连接方式,这会导致大量连接在完成数据交换后进入TIME_WAIT状态。 2. TCP/IP协议的设计,为了防止旧连接的延迟数据影响新连接,以及确保TCP连接可靠关闭,会将...

    TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决

    "TCP 状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决" TCP 状态迁移是 TCP 协议中的一种机制,它用于描述 TCP 连接的不同状态。在 TCP 连接中,客户端和服务器端都可以处于不同的状态,例如 ESTABLISHED、CLOSE_WAIT...

    nginx优化之request_time 和upstream_response_time差别1

    另一方面,`upstream_response_time` 是用来跟踪从Nginx与上游服务器建立连接到接收完整响应并关闭连接的时间。这个时间仅包括了Nginx与后端服务器之间的交互,不包含客户端的网络延迟和Nginx自身的处理时间。格式...

    [线上问题] Nginx与Tomcat、Client之间请求的长连接配置不一致问题分析解决

    从提供的文件信息中,我们可以提取出有关于Nginx与Tomcat以及客户端之间请求的长连接配置不一致问题的分析解决知识点。同时,文件中提到了Linux系统中netstat命令的用法,我们可以从这部分内容中提取出与网络连接...

    Netstat命令详解如何关闭TIME_WAIT连接如何查看nginx的访问流量[归类].pdf

    4. 关闭 TIME_WAIT 连接:使用 netstat -ant | grep TIME_WAIT | awk '{print $2}' | xargs kill -9 命令可以关闭 TIME_WAIT 连接。 网络连接状态详解: 网络连接状态可以分为 12 种可能的状态,前面 11 种是按照 ...

    Nginx安装+nginx_upstream_check_module后端健康检查

    ### Nginx安装与后端健康检查模块配置详解 #### 一、Nginx环境搭建与核心组件安装 **1.1 基础环境准备** - **操作系统**: CentOS 6.5 - **基本服务器配置**: 在安装过程中选择了“基本服务器”配置。 **1.2 安装...

    Time-wait详解和解决方案.docx

    1. **端口资源耗尽**:对于作为客户端的主机而言,如果频繁地创建和关闭大量连接,将使得短时间内产生大量的`TIME_WAIT`状态,占用端口资源。在Linux系统中,默认端口范围为32768-61000。根据TCP连接的四元组特性,...

    nginx_upstream_check_module

    在Nginx配置文件中,`nginx_upstream_check_module`的使用涉及到一些特定的指令,如`check`、`check_interval`、`check_timeout`等。以下是一个简单的示例: ```nginx http { upstream backend { server backend1...

    nginx_http_push_module

    5. **客户端集成**:在客户端JavaScript代码中,通过Ajax或者WebSocket与服务器建立长连接,订阅频道并接收推送的数据。 在实际应用中,需要注意以下几点: 1. **性能优化**:由于Web推送可能导致大量并发连接,...

    nginx.config_nginx_

    这里`include`指令用于引入其他配置文件,`default_type`定义默认MIME类型,`sendfile`启用高效文件传输,`keepalive_timeout`设置客户端保持连接的超时时间。 4. **server块** - `server`块定义了一个监听特定...

    nginx_tcp_proxy_module-master

    5. **超时设置**:通过`proxy_timeout`可以设置与后端服务器的连接超时时间。 6. **Proxy Protocol**:如果开启`proxy_protocol`选项,Nginx会传递客户端的原始IP地址和其他信息,这对于需要识别真实客户端IP的情况...

    05尚硅谷_Nginx_hit1qr_nginx尚硅谷_nginx_

    Nginx 默认会记录访问日志,这些日志可以帮助分析服务器的运行状态、流量情况以及问题排查。日志格式可以通过 log_format 指令自定义,日志文件路径在 access.log 和 error.log 中设定。通过日志分析工具,如 ...

    详解Nginx服务器中配置超时时间的方法

    4. **keepalive_timeout**: 这个参数设置的是与客户端保持长连接的超时时间。默认值为75秒,你可以设置为更长的时间,如600秒,以便在处理大量短连接请求时减少连接开销。 5. **proxy_connect_timeout**: 定义Nginx...

    linux nginx nginx_upstream_jvm_route

    linux nginx nginx_upstream_jvm_route

    nginx_upstream_check_module-master

    `nginx_upstream_check_module`还可以与其他模块结合使用,如`nginx_plus_api`,以提供更丰富的监控和管理功能。同时,可以根据实际需求调整检查算法、增加自定义检查脚本等,以实现更高级的健康检查逻辑。 总之,`...

    nginx 限制ip、并发量、连接数等配置

    在Nginx配置文件(通常是`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf/nginx.conf`)中,可以使用`allow`和`deny`指令来允许或禁止特定IP或IP段的访问。以下是一个示例: ```nginx server { listen 80; ...

Global site tag (gtag.js) - Google Analytics