- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设有一个客户端与服务器建立了很多短期连接。
如果客户端关闭连接,客户端会有很多端口处于TIME_WAIT
状态。由于客户端用完了本地端口,因此无法快速进行新的连接尝试。
如果服务器关闭连接,我会在服务器端看到很多TIME_WAIT
。然而,这有什么坏处吗?客户端(或其他客户端)可以继续尝试连接,因为它永远不会用完本地端口,并且服务器端的 TIME_WAIT
状态的数量会增加。最终会发生什么?有什么不好的事情发生吗? (速度变慢、崩溃、连接断开等)
请注意,我的问题不是“TIME_WAIT
的目的是什么?”但是“如果服务器上有这么多 TIME_WAIT
状态会怎样?”我已经知道在 TCP/IP 中关闭连接时会发生什么,以及为什么需要 TIME_WAIT
状态。我不是要排除故障,只是想知道它的潜在问题是什么。
简单地说,假设netstat -nat | grep:8080 | grep TIME_WAIT | wc -l
打印 100000
。会发生什么?操作系统的网络堆栈是否变慢? “打开的文件太多”错误?或者,只是没什么可担心的?
最佳答案
TIME_WAIT
中的每个套接字都会消耗内核中的一些内存,通常比 ESTABLISHED
套接字少一些,但仍然很重要。足够大的数量可能会耗尽内核内存,或者至少会降低性能,因为该内存可用于其他目的。 TIME_WAIT
套接字不保存打开的文件描述符(假设它们已正确关闭),因此您不必担心“打开的文件过多”错误。
套接字还绑定(bind)了特定的 src
/dst
IP 地址和端口,因此在 TIME_WAIT
间隔期间不能重复使用. (这是 TIME_WAIT
状态的预期目的。)占用端口通常不是问题,除非您需要使用相同的端口对重新连接。大多数情况下,一侧会使用一个临时端口,只有一侧锚定到一个众所周知的端口。但是,如果您在相同的两个 IP 地址之间重复频繁地连接,大量的 TIME_WAIT
套接字可能会耗尽临时端口空间。请注意,这只会影响这个特定的 IP 地址对,不会影响与其他主机的连接建立。
关于networking - 服务器端很多TIME_WAIT的代价是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803566/
我遇到了一个网络服务器问题,该服务器从我公司生产的设备接收信号。设备偶尔会重用它刚刚使用过的源端口。这会导致 SYN 被服务器丢弃。然后设备会重试,直到旧套接字超出服务器上的 TIME_WAIT 时间
我正在尝试避免客户端出现 TIME_WAIT。我连接然后设置 O_NONBLOCK 和 SO_REUSEADDR。我调用 read 直到它返回 0。当 read 返回 0 时,errno 也为 0。我
我正在尝试解析主机名,然后打开/关闭与主机的套接字。 下面的代码工作正常。我遇到的问题是连接似乎没有正确关闭。我只剩下一堆 TIME_WAITS: tcp 0 0 192.16
当我在现场检查 mysql 加载时间时。我得到的结果显示连接为 TIME_WAIT。即使我关闭了每一页上的连接。有时网站不会加载说连接太多。有什么办法可以解决这个问题? 提前感谢您的任何回复或建议 最
我试图通过设置 tcp_fin_timeout 来减少连接处于 TIME_WAIT 状态的时间 详细 here : root:~# sysctl -w net.ipv4.tcp_fin_timeout
我在 C# 中有一个 TCP 隧道。我需要打开和关闭隧道,这是我在服务器和客户端之间的应用程序。我正在使用它来关闭数据连接以测试另一个应用程序。我必须使用特定的端口。 根据我等待重新连接的时间长短,在
我正在尝试避免客户端出现 TIME_WAIT。我连接然后设置 O_NONBLOCK 和 SO_REUSEADDR。我调用 read 直到它返回 0。当 read 返回 0 时,errno 也为 0。我
这个问题在这里已经有了答案: Bind error while recreating socket (4 个答案) 关闭 8 年前。 我知道您会将其掩盖为重复项(question1、question
我设置了一个 TCP 服务器/客户端,它们按照我通常想要的方式进行通信。 我现在想做的是添加允许客户端在连接丢失后自动重新连接到服务器的功能。我无法在线找到有关如何执行此操作的完整信息。 详细信息:-
我开发了一个包含 tcp 服务器的服务。 当我重新启动我的应用程序时,有时我的应用程序无法绑定(bind) TIME_WAIT 的端口原因。 在我的应用程序中,我想在绑定(bind)失败时添加一个过程
我们有一个使用 Apache mod 代理的相当繁忙的网站(每天 100 万页浏览量),该代理在 TIME_WAIT 状态下不断因连接(>1,000)而过载。连接到端口 3306 (mysql),但
在以下情况下,当 TIME_WAIT 中的套接字收到一个段时会发生什么 a) 当它收到丢失的ACK时 b) 当发送节点想要使用服务器上的相同 src_ip:src_port 与服务器已经具有 TIME
假设我有一台服务器运行日间服务。 然后我用telnet连接这个白天服务器,服务器发送时间数据并关闭连接,现在,因为服务器是主动关闭端,应该进入TIME_WAIT状态。 那么,为什么我可以在最后一次 t
我已阅读相关问题: What is the cost of many TIME_WAIT on the server side? 但我还是迷路了。我们有两台应用服务器和一台数据库服务器(都是云服务提供
因此,我在一台服务器上有应用程序 A,它每秒向另一台服务器上的应用程序 B 发送 710 条 HTTP POST 消息,该服务器正在监听单个端口。连接不是保持事件的;他们关门了。 几分钟后,应用程序
我正在编写一个简单的 HTTP 服务器并了解 TIME_WAIT。繁重环境中的真实 Web 服务器如何处理来自数千个用户的请求,而不会在处理请求后所有套接字都卡在 TIME_WAIT 中? (不询问保
我们正在尝试调整一个应用程序,该应用程序通过 TCP 接受消息并且还使用 TCP 进行某些内部消息传递。在负载测试时,我们注意到随着对系统同时发出更多请求,响应时间显着降低(然后完全停止)。在此期间,
我们将 haproxy 1.3.26 托管在配备 2.13 GHz Intel Xeon 处理器的 CentOS 5.9 机器上,该处理器充当众多服务的 http 和 tcp 负载均衡器,峰值吞吐量约
我正在尝试在 GCP 上设置 Aerospike 集群。我正在使用 Core OS 和 Docker 来运行 Aerospike 守护进程。 我在 aerospike.conf 中为 as-node-
我们使用 Apache 服务器作为前端服务器,使用 Tomcat 服务器作为后端。前端客户端是一个 java swing 应用程序。该协议(protocol)是粗麻布的。 有时我们会收到很多小请求。当
我是一名优秀的程序员,十分优秀!