当我在nginx -> node.js服务器上运行apachebench时,我注意到在设置了一定数量的并发请求后,一些请求没有完成。ss -s输出结果如下:
TCP: 26006 (estab 660, closed 25296, orphaned 38, synrecv 0, timewait 25295/0), ports 0看起来大多数连接已经关闭,正在等待。我想这会在很重的负载下工作得很好。
有没有可能更快地“回收”这些连接?它们似乎持续了相当长的时间(10秒左右?)
发布于 2013-11-03 06:49:49
它们实际上持续了两分钟。它们不是“请求”,而是连接,它们都已关闭。
您应该确保设置了合理的HTTP保持连接间隔,以便对等项可以对多个HTTP请求重复使用TCP连接器。
TIME-WAIT状态是TCP安全的重要组成部分,不应受到干扰。
发布于 2013-11-04 17:19:42
This可能有助于解释为什么TIME_WAIT存在,以及这些连接是如何在TIME_WAIT中结束的。
我很想知道您是否在一台机器上运行测试,如果是的话,可能是客户端或服务器端离开了TIME_WAIT中的套接字。如果它是测试的客户端,那么你就不需要那么担心了。如果您在一台机器上运行测试,则将其拆分,这样您就可以拥有自己的服务器,这样您就可以看到是什么在生成TIME_WAITs。
如果TIME_WAITS是由服务器生成的,那么您需要弄清楚为什么要在服务器上启动活动关闭,并查看将活动关闭移到客户端是否可行。
https://stackoverflow.com/questions/19739501
复制相似问题