我有一个在 5 分钟内编写的非常简单的程序,它打开一个服务器套接字并循环请求并将发送给它的字节打印到屏幕上。
然后,我尝试对可以使用多少个连接进行基准测试,以尝试找出该程序可以支持多少并发用户。
在另一台机器上(它们之间的网络没有饱和)我创建了一个简单的程序,它进入一个循环并连接到服务器机器并发送字节“hello world”。
当循环为 1000-3000 时,客户端完成发送所有请求。当循环超过 5000 时,它在完成前 X 个请求后开始超时。为什么是这样?我确保在循环中关闭我的套接字。
你只能在一定时间内创建这么多连接吗?
此限制是否仅适用于同一台机器,我不必担心生产中 5000 多个请求都来自不同机器的情况?
原文由 erotsppa 发布,翻译遵循 CC BY-SA 4.0 许可协议
有限制,是的。见
ulimit
。此外,还需要考虑
TIME_WAIT
状态。一旦 TCP 套接字关闭(默认情况下),端口在TIME_WAIT
状态下保持 占用 2 分钟。该值是可调的。即使它们已关闭,这也会“使您无法使用套接字”。运行
netstat
以查看TIME_WAIT
的运行情况。PS
TIME_WAIT
的原因是为了处理socket关闭后数据包到达的情况。这可能是因为数据包延迟或另一方不知道套接字已关闭。这允许操作系统静默丢弃这些数据包,而不会“感染”不同的、不相关的套接字连接。