压测的时候 QPS 为什么上不去?答案和解析
💡
原文中文,约2300字,阅读约需6分钟。
📝
内容提要
客户端端口不足是由于TCP连接的四元组限制。通过调整端口范围和使用长连接可以缓解此问题。TIME_WAIT状态占用端口,限制并发连接。使用ss命令查看连接状态有助于识别瓶颈。
🎯
关键要点
- 客户端端口不足是由于TCP连接的四元组限制。
- TCP连接的四元组由源IP、源端口、目标IP和目标端口组成。
- 可以通过调整端口范围来增加可用端口,使用命令设置范围。
- 在高并发情况下,固定的IP和端口可能导致端口不够用。
- TCP连接结束后,客户端端口会进入TIME_WAIT状态,需等待2MSL才能释放。
- 可以通过调整参数和使用长连接来缓解端口不足的问题。
- NAT设备可能导致源IP数量多,但经过NAT后连接使用相同IP,容易造成四元组不足。
- 使用ss命令查看连接状态可以帮助识别瓶颈。
- TIME_WAIT状态的端口可以通过参数调整用于新连接,但可能带来其他问题。
- 抓包分析在客户端角度可能不易,建议通过网络状态排查。
❓
延伸问答
为什么客户端端口会不足?
客户端端口不足是由于TCP连接的四元组限制,特别是在高并发情况下,固定的IP和端口可能导致可用端口不够。
如何解决TCP连接的TIME_WAIT状态问题?
可以通过调整参数来减少TIME_WAIT状态的影响,例如设置tcp_tw_reuse为1,或使用长连接来减少频繁建立连接。
如何查看当前TCP连接的状态?
可以使用ss命令查看连接状态,特别是使用ss -s命令可以看到处于TIME_WAIT状态的连接数量。
TCP连接的四元组是什么?
TCP连接的四元组由源IP、源端口、目标IP和目标端口组成,这四个元素共同标识一个唯一的TCP连接。
NAT设备如何影响TCP连接的数量?
NAT设备可能导致源IP数量多,但经过NAT后连接使用相同IP,容易造成四元组不足,从而影响TCP连接的数量。
如何调整可用的客户端端口范围?
可以通过命令sysctl -w net.ipv4.ip_local_port_range="32768 65535"来调整可用的客户端端口范围。
➡️