connect timeout可能原因
- 程序backlog设置比较小
/proc/sys/net/ipv4/tcp_max_syn_backlog
数值过小/proc/sys/net/core/somaxconn
数值过小- 网卡/交换机为百兆,超过则丢包
- 服务器资源或者运行实例满负荷运行,无法快速响应请求
检查程序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配置