2

当我在 nginx -> node.js 服务器上运行 apachebench 时,我注意到在设置了一定数量的并发请求后,一些请求没有被跟踪完成。输出结果ss -s如下:

TCP:   26006 (estab 660, closed 25296, orphaned 38, synrecv 0, timewait 25295/0), ports 0

看起来大多数连接已关闭并正在等待。我想这在重负载下会很好地工作。

是否可以更快地“回收”这些连接?它们似乎会持续很长时间(10 秒左右?)

4

2 回答 2

0

他们实际上坚持了两分钟。它们不是“请求”而是连接,它们都已关闭。

您应该确保设置了合理的 HTTP keepalive 间隔,以便对等方可以为多个 HTTP 请求重用 TCP 连接器。

TIME-WAIT 状态是 TCP 安全性的重要组成部分,不应该被弄乱。

于 2013-11-02T22:49:48.913 回答
0

可能有助于解释为什么 TIME_WAIT 存在以及这些连接首先如何以 TIME_WAIT 结束。

我很想知道您是否在单台机器上运行测试,如果是这样,它可能是客户端或服务器端将套接字留在 TIME_WAIT 中。如果它是测试的客户端,那么你真的不需要那么担心。如果您在一台机器上运行测试,请将其拆分,以便您拥有自己的服务器,以便您可以看到生成 TIME_WAIT 的原因。

如果服务器正在生成 TIME_WAITS,那么您需要弄清楚为什么要在服务器上启动主动关闭,并查看将主动关闭移动到客户端是否可行。

于 2013-11-04T09:19:41.507 回答