connect timeout可能原因

  1. 程序backlog设置比较小
  2. /proc/sys/net/ipv4/tcp_max_syn_backlog 数值过小
  3. /proc/sys/net/core/somaxconn 数值过小
  4. 网卡/交换机为百兆,超过则丢包
  5. 服务器资源或者运行实例满负荷运行,无法快速响应请求

检查程序backlog配置

ss -lnt
State    Recv-Q Send-Q Local Address:Port Peer Address:Port 
LISTEN      0         128          *:42769                           *:* 
LISTEN      0         100         127.0.0.1:25                     *:*
LISTEN      0         100           :::20063                          :::*

ss命令中,LISTEN的:

  • Recv-Q:表示的当前等待服务端调用 accept 完成三次握手的 listen backlog 数值,也就是说,当客户端通过 connect() 去连接正在 listen() 的服务端时,这些连接会一直处于这个 queue 里面直到被服务端 accept()
  • Send-Q:表示的则是最大的 listen backlog 数值
  • backlog的值则由int listen(int sockfd, int backlog) 中的第二个参数指定,但server监听中的backlog则会由min(backlog, somaxconn)两个参数共同决定,即/proc/sys/net/ipv4/tcp_max_syn_backlog和/proc/sys/net/core/somaxconn配置

参考链接