当我在nginx上运行apachebench时 - > node.js服务器,我注意到在设置了一定数量的并发请求后,一些请求没有被跟踪完成。 ss -s
输出的结果如下:
TCP: 26006 (estab 660, closed 25296, orphaned 38, synrecv 0, timewait 25295/0), ports 0
看起来大多数连接已经关闭并且正在等待。我想这在重负荷下会很好用。
是否可以更快地“回收”这些连接?它们似乎持续了很长时间(10秒左右?)
答案 0 :(得分:0)
他们实际上持续了两分钟。它们不是“请求”而是连接,它们都已关闭。
您应确保设置了合理的HTTP keepalive间隔,以便对等方可以为多个HTTP请求重用TCP连接器。
TIME-WAIT状态是TCP安全性的一个重要部分,不应该被搞乱。
答案 1 :(得分:0)
This可能有助于解释为什么TIME_WAIT存在以及这些连接最初是如何在TIME_WAIT中结束的。
我很想知道你是否在一台机器上运行测试,如果是这样,它可能是客户端或服务器端在TIME_WAIT中留下套接字。如果它是测试的客户端,那么你真的不必担心这么多。如果您在一台计算机上运行测试,则将其拆分,以便您自己拥有服务器,以便可以看到生成TIME_WAIT的内容。
如果服务器正在生成TIME_WAITS,那么您需要弄清楚为什么要在服务器上启动主动关闭,并查看将该主动关闭移动到客户端是否切实可行。