当前位置: 首页 > 知识库问答 >
问题:

HttpClient中出现意外连接关闭

宋鸿云
2023-03-14

我在web应用程序中遇到了一个HttpClient(版本4.5.2)的问题,我的意思是,以多线程的方式。在正常情况下,当一个连接请求到达时,从池中租用一个连接,然后使用,最后再次释放回池中,以便在以后的请求中再次使用,作为id为673890的连接状态日志的以下部分。

15 Feb 2017 018:25:54:115 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:249 - Connection request: [route: {}->http://127.0.0.1:8080][total kept alive: 51; route allocated: 4 of 100; total allocated: 92 of 500]
15 Feb 2017 018:25:54:116 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:282 - Connection leased: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 51; route allocated: 4 of 100; total allocated: 92 of 500]
15 Feb 2017 018:25:54:116 p-1-thread-121 DEBUG DefaultManagedHttpClientConnection:90 - http-outgoing-673890: set socket timeout to 9000
15 Feb 2017 018:25:54:120 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:314 - Connection [id: 673890][route: {}->http://127.0.0.1:8080] can be kept alive for 10.0 seconds
15 Feb 2017 018:25:54:121 p-1-thread-121 DEBUG PoolingHttpClientConnectionManager:320 - Connection released: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 4 of 100; total allocated: 92 of 500]

在以我上面提到的正常方式多次使用上述连接(id 673890)后,我注意到代码中发生了以下情况:

15 Feb 2017 018:25:54:130 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:249 - Connection request: [route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 4 of 100; total allocated: 92 of 500]
15 Feb 2017 018:25:54:130 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:282 - Connection leased: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 54; route allocated: 4 of 100; total allocated: 92 of 500]
15 Feb 2017 018:25:54:131 p-1-thread-126 DEBUG DefaultManagedHttpClientConnection:90 - http-outgoing-673890: set socket timeout to 9000
15 Feb 2017 018:25:54:133 p-1-thread-126 DEBUG DefaultManagedHttpClientConnection:81 - http-outgoing-673890: Close connection
15 Feb 2017 018:25:54:133 p-1-thread-126 DEBUG PoolingHttpClientConnectionManager:320 - Connection released: [id: 673890][route: {}->http://127.0.0.1:8080][total kept alive: 55; route allocated: 3 of 100; total allocated: 91 of 500]

日志说连接被请求、租用、使用、关闭,然后释放回池中。所以,我的问题是为什么连接被关闭?为什么它在关闭后被释放到池中?

我知道服务器可能会关闭连接,但情况不同。在这种情况下,连接是从池中租用的,被确定为过时,因此建立并使用了一个新的连接,但上面我给出的日志显示了不同的行为。

我知道HttpClient中连接关闭的两个原因。首先,由于KeepAliveTime已过期,他们因空闲而关闭。其次,由服务器关闭,这会使池中的连接过时。是否有其他关闭连接的原因?

共有1个答案

高溪叠
2023-03-14

根据Oleg Kalnichevski在HttpClient邮件列表中的回复,以及我所做的检查,结果表明问题是由另一只手发送的“Connection:close”头造成的。另一个可能导致相同情况的原因是使用HTTP/1.0非持久性连接。

 类似资料:
  • 我正在使用HttpClient v4.5.5 我有一个如下: 然后我使用超文本传输协议客户端如下: 通过定期调用(每隔几分钟) 偶尔我会出错 ,据我所知,这种情况要么发生在旧的HttpClient版本上,要么发生在您关闭HttpClient时。我没有这样做。所以我不明白为什么会出现这个错误。它会恢复,但有这样的异常是个问题。

  • 版本 上下文 我只是想在核心示例io中运行http客户端。维特斯。实例果心http。易于理解的客户运行此示例时,its发现已建立的连接在请求完成后未关闭。 服务器端我没有看到任何问题。因为在尝试使用jmeter和服务器时,它工作得很好。所以我认为问题在于HttpClient。 有人能帮我吗? 提前谢谢。复制的步骤 额外的 即使在请求和响应结束后,仍会显示以下内容。在给LINUX 窗户 在LINUX

  • 我一直试图通过Postgre DB Server运行这个批处理文件,并运行两个不同的sql文件,如下所示: 但是问题来了,有时我会得到下面的命令query1或query2的错误: 这种情况只是偶尔发生,所以我不完全确定为什么会发生。有人能解释为什么会这样,以及这个问题是否有解决办法吗?谢谢! 更新:在实际的Postgre应用程序中尝试打开远程服务器时,我有时也会遇到相同的错误:“出现错误:”服务器

  • 我是Ruby on Rails的新手。我通过教程创建了两个基本的演示应用程序 PG::错误 服务器意外关闭了连接这可能意味着服务器在处理请求之前或处理请求时异常终止。 而且有时(通常是在我重新启动postgresql时), PG::错误 服务器意外关闭了连接这可能意味着服务器在处理请求之前或处理请求时异常终止。无法发送启动数据包:管道中断 这是我的堆栈跟踪 我在Ubuntu12.04(因为goog

  • 所以我正试图用SMTP和AWS向我自己发送电子邮件。我在配置中使用的电子邮件经过验证,因为我仍然在SES中使用沙盒模式。在运行脚本时,我不断收到错误即使我尝试与OpenSSL连接,但它已连接,但显示

  • 问题内容: 我正在使用他们的托管页面集成功能与替代付款进行集成。他们的C#SDK目前没有可用的集成,但是您可以看到它非常简单,我制作了一个小类来发送发布请求并获取JSON响应。 我测试了我在PostMan和cURL上发送的json对象,它们都可以工作,也可以使用身份验证标头,所以我认为它们不是问题。这是我的课程的构造函数: 以及我发布数据的方法: 然后,我在PostAsync行收到此错误:。这是错