先说明一下问题:
最近系统上线,系统使用HttpClient发送报文(会有循环发送情况)到外部系统通过nginx分发,这时nginx会报出connect failed (110- Connection timed out)错误(有一些请求报错,有一些不报,都是不定的),在网络中查到的答案大部分都说是因为系统内核错误,因为Nginx调用了gettimeofday()方法,但是我们通过编写C代码调用gettimeofday()方法进行测试,根本无法重现这个BUG,所以想到会不会是因为系统内部的错误。
经过调查发现我们在使用HttpClient发送报文之后没有关闭连接,添加代码:
httpclient = new DefaultHttpClient(new ThreadSafeClientConnManager());
finally { if (httpclient != null && httppost != null){ // 释放连接资源 httppost.releaseConnection(); // 关闭Socket连接 httpclient.getConnectionManager().shutdown(); } }
然后再经过一天一夜的测试发现没有再出现connect failed (110- Connection timed out)这个问题了。
再说一下出现这个问题的猜测:
系统内部(我们系统有定时器和主动发送)一直再创建新的httpclient连接并且没有关闭这个连接,一旦出现大量发送报文会导致系统与Nginx之间的等待的连接过多,这样会导致nginx分发出现问题,从而导致nginx报出Connection timed out,因为连接太多了,没有释放,而nginx主动释放连接是有时间的。
这是我的猜测,能帮到你最好,如果不是这个问题,请帮忙回复一下,告诉我,我也好知道真相,非常感谢!
希望我的这个文章能够帮到你们,如果有用,请点个赞,谢啦!
也希望大家能够积极的发表文章能够实现知识共享。
相关推荐
标题:“Software caused connection abort: recv failed” 描述:“Software caused connection abort: recv failed” 知识点解析: ### 背景介绍 “Software caused connection abort: recv failed”这一错误...
本篇文章将深入探讨HttpClient的异步请求特性,以及如何使用它来发送GET和POST请求。 在Java中,同步请求会阻塞调用线程,直到服务器返回响应。然而,异步请求允许程序在等待响应的同时继续执行其他任务,提高了...
### Java HttpClient 发送GET请求和带有表单参数的POST请求详解 #### 一、概述 在Java编程中,处理HTTP请求是一项常见的需求,特别是在与Web服务进行交互时。Apache HttpClient库提供了一种强大的方法来执行HTTP...
这里提到的四个jar包——httpcore-4.2.4,httpclient-4.2.5,httpclient-cache-4.2.5,httpmime-4.2.5,都是Apache HttpClient库的不同组件,用于支持HTTP通信和相关功能。 **httpcore-4.2.4.jar** 是HTTP Core模块...
除此之外,我们对请求添加签名的校验,key设置为X-Sign 接口定义 /// /// 获取时间戳(毫秒). /// /// <param name=dateTime></param> /// <returns></returns> [HttpPost] [AllowAnonymous]
- I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying request - I/O exception (java.net.ConnectException) caught when processing request:...
而"httpclient-demo"项目则是一个客户端应用,它的任务是利用Apache HttpClient库来构建和发送POST请求到"post-demo"项目提供的接口。HttpClient库提供了丰富的API,允许开发者灵活地设置请求头、主体内容、超时等...
赠送jar包:httpclient-4.5.13.jar; 赠送原API文档:httpclient-4.5.13-javadoc.jar; 赠送源代码:httpclient-4.5.13-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.13.pom; 包含翻译后的API文档:...
《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...
2013-11-21 15:31 292,890 httpclient-4.0.2.jar 2017-12-20 12:08 351,132 httpclient-4.1.1.jar 2012-08-03 01:45 451,595 httpclient-4.1.2-sources.jar 2012-08-03 01:44 352,254 httpclient-4.1.2.jar 2012-08-...
4. **超时设置**:可能会提到如何设置请求超时,以防止因服务器响应过慢导致程序阻塞。 5. **异步编程**:由于Unity游戏引擎推荐使用异步操作以避免阻塞主线程,所以会涉及使用async/await关键字来实现非阻塞的网络...
1. **httpclient-4.5.10.jar**:这是HttpClient的主要实现库,提供了完整的HTTP请求和响应处理功能。它包括了各种HTTP方法(如GET、POST、PUT等)、重定向处理、Cookie管理、身份认证以及连接管理等功能。版本4.5.x...
《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...
在Java编程中,HTTPClient库是一个非常常用的工具,用于发送HTTP请求,包括POST方式的请求。本篇文章将详细讲解如何使用HTTPClient库以POST方式发送JSON格式的数据,并介绍相关依赖包。 首先,为了使用HTTPClient库...
在这个场景下,`ConnectionServlet`可能负责接收`HttpClient`发送的GET或POST请求,处理后返回数据。 文件`4.8通过HttpClient异步请求数据`可能是一个示例代码或教程,讲述了如何在Android应用的4.8版本中使用`...
本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...
比如超时设置过短,服务器未在规定时间内返回响应,HttpClient就会认为响应无效。可以适当增加连接超时和读取超时时间: ```java RequestConfig config = RequestConfig.custom() .setConnectTimeout(10000) // ...
httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等10个必须的开发包。 1.commons-codec-1.9.jar 2.commons-logging-1.2.jar 3.fluent-hc-4.5.jar 4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6....
现在,我们将深入探讨如何使用`httpclient`进行跨域请求,并结合`fastjson`处理数据。 首先,理解跨域请求的概念至关重要。由于同源策略的限制,JavaScript通常只能访问与当前页面相同协议、域名和端口的资源。若要...
赠送jar包:httpclient-4.5.6.jar; 赠送原API文档:httpclient-4.5.6-javadoc.jar; 赠送源代码:httpclient-4.5.6-sources.jar; 赠送Maven依赖信息文件:httpclient-4.5.6.pom; 包含翻译后的API文档:httpclient...