压测:Failed to establish a new connection: [Errno 99] Cannot assign requested address
一、原因
socket TIME_WAIT状态未结束前,消耗完所有可用端口并尝试重用这些端口;导致没有可用端口。
二、解决方案
- 增加可用端口范围
# sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999
# sysctl net.ipv4.ip_local_port_range="30000 62000"
net.ipv4.ip_local_port_range= 30000 62000
注:如果使用短连接,即使增加可用端口还是会被占满的
- 重用 TIME_WAIT 状态下的 socket 连接
# sysctl net.ipv4.tcp_tw_reuse=1
# sysctl -p
保证在 TIME_WAIT 状态下,Linux kernel 重用 socket 连接。