![生产实例:CLOSE_WAIT 连接问题](https://linux22.com/image/566296/%E7%94%9F%E4%BA%A7%E5%AE%9E%E4%BE%8B%EF%BC%9ACLOSE_WAIT%20%E8%BF%9E%E6%8E%A5%E9%97%AE%E9%A2%98.png)
我在 1 个 ELB 后面使用了 10 个 EC2 实例。ELB 配置了 80 到 8080 以及 443 到 8080 端口。
所有 10EC2 实例都安装了 Apache Tomcat,1 分钟内 ELB 上的总请求数约为 8000 到 10000 个。
我在拥有 Apache Tomcat 的 10 个 EC2 实例上遇到了 CLOSE_WAIT 连接的问题。
EC2 实例类型:m1.xlarge
当我们重新启动 Apache Tomcat 时,所有 CLOSE_WAIT 连接都会丢失,但这不是在生产实例上工作的正确方法。
请帮帮我。
答案1
netstat -an
有些客户端在完成操作后不会正确关闭 TCP 连接。这超出了您的控制范围。这些客户端通常会在一段时间后超时,除了使您从中获取的列表变得混乱等之外,不会造成太大的问题。
那么,您为什么会遇到这个问题?
这可能是相关的: 什么限制了 Linux 服务器上的最大连接数?
答案2
这是此处描述的问题的一个变体: https://unix.stackexchange.com/questions/10106/orphaned-connections-in-close-wait-state 您的应用程序是否有许多移动客户端?这些客户端通过不可靠的网络连接,可能会对 TCP 状态做出疯狂的事情。
处理此问题最简单的方法是滚动重启 Apache 实例 - 比如每 30 分钟重启一台服务器。如果您的 ELB 后面有足够的实例,那么对您服务的净影响应该是可以承受的。
答案3
查看刀具。
Cutter 是一个基于 Linux 的防火墙工具,允许防火墙管理员强制中止通过防火墙的连接。