gpt4 book ai didi

java - 多个完整的 HTTP 请求卡在 TCP CLOSE_WAIT 状态

转载 作者:可可西里 更新时间:2023-11-01 02:57:28 25 4
gpt4 key购买 nike

我有一个基于 Java 和 Tomcat 的服务器应用程序,它向其他网站发起许多出站 HTTP 请求。我们使用 Jakarta 的 HTTP 核心/客户端库,最新版本。

服务器在某个时候锁定,因为它的所有工作线程都在尝试关闭已完成的 HTTP 连接。使用“lsof”会发现一堆卡在 TCP CLOSE_WAIT 状态的套接字。

这不会发生在所有连接上,甚至不会发生在大多数连接上。事实上,我之前看到它并通过确保设置 Connection: Close 响应 header 来解决它。所以这让我认为这可能是远程服务器的不良行为。

自从我将应用程序移动到一个全新的服务提供商后,它可能又出现了——不同的操作系统、网络情况。

但是,我仍然不知道我能做些什么来解决这个问题。一些在互联网上四处闲逛并没有发现我还没有做的任何事情。只是想问问是否有人看到并解决了这个问题?

最佳答案

我不确定您对 TCP 了解多少。当 TCP 客户端处于 ESTABLISHED 状态并接收到 FIN 数据包时,它会进入 CLOSE_WAIT 状态。 CLOSE_WAIT 状态意味着它正在等待接收来自应用层的 close 命令 - 在这种情况下,这意味着它正在等待 close() 在套接字上调用。

因此,我的猜测是在工作线程中调用 close() 可以解决问题。或者您已经在这样做了?

关于java - 多个完整的 HTTP 请求卡在 TCP CLOSE_WAIT 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com