我的服务器有大量 TIME_WAIT 会话。这些会话是服务器关闭的,但客户端没有关闭。
我想分析一个示例会话,以了解那里发生了什么。对 tcpdump 输出进行简单的“强力”分析是没有用的,因为大多数会话都已关闭。
有没有办法只挖掘出那些导致 TIME_WAIT 的连接?
答案1
处于 TIME_WAIT 状态的连接表示您的服务器是其关闭阶段的发起者。它可以防止接受较晚的段并确保另一端已正确关闭连接。
在大多数情况下,拥有大量 TIME_WAIT 连接不会有什么问题,这取决于服务器提供的服务。TIME_WAIT 连接数量过多的主要问题是内存消耗,40,000 个连接仅消耗约 10MB 内存。
如果你认为这可能会对你的具体情况造成伤害,你可以使用党卫军从 iproute2 查看哪些元组是罪魁祸首:
$ ss -tan state time-wait
然后,使用如下工具wireshark,您可以使用类似以下过滤器轻松分析与该元组相对应的 TCP 流:
tcp.port == <port> and ip.addr == <ip>
您还可以使用 wireshark 的“跟踪 TCP 流”功能,它将显示来自该特定连接的每个段。