现象

内部提供了一个文件上传的SDK,通过Apache HttpClient访问公司内部的文件服务器进行文件上传,然后偶尔会有同事反馈文件没有上传成功,但是文件服务器这边查看log也并没有收到请求,

比较频繁出现的是,有个小组自己封装了一个导入导出的服务,这个服务会大量频繁的与文件服务打交道,在高峰期的时候,对方导入导出就会大量出现文件无法上传,卡住的情况,查看log就是客户端打印出开始上传,然后线程就没有下文了,

因为sdk没有提供设置connectionTimeout等超时时间的设置,超时时间使用的都是默认的,因此怀疑是长时间没有建立连接在等待着,因此sdk做了一个超时时间的设置,5秒钟,没有建立连接成功就出错,设置过该参数后看到如下结果:

Timeout waiting for connection from pool,从连接池中获取连接超时,这种情况说明connection连接都在被占用着,但是连接总数我们设置在1024个,根据业务量不应该会有这么大的并发以及等待这么久,

由此考虑可能是连接泄露了,没有及时归还到连接池中,因此去查看了一下SDK中使用httpclient上传的代码,可以看见只对用户上传的文件流进行了关闭,但是并没有对httpClient返回的文件流进行关闭,因此出现的问题找到了,我们需要在最后关闭response流相关的资源。

解决方法

在最后对response的文件流进行资源关闭,httpClient就会释放连接。

if (httpResponse != null) {httpResponse.getEntity().getContent().close();
}

注意点

当文件流(不管是参数传入的文件流,还是http返回的内容流)用完之后一定需要关闭释放连接,发生异常时一定要用httpRequest对象调用abort方法释放连接。

HttpClient连接池泄露相关推荐

  1. Apache HttpClient连接池泄露问题排查

    Apache HttpClient连接池泄露问题排查 问题背景 业务系统主要的业务是一个数据聚合管理平台,其中系统有一个功能是同步所有资源(简称 大同步) 业务同步数据请求数据工具是适配 Apache ...

  2. mysql连接池泄露_一次线上故障:数据库连接池泄露后的思考

    作者:陈朗,普兰金融科技能效工程部开发工程师 一:初步排查 早上作为能效平台系统的使用高峰期,系统负载通常比其它时间段更大一些,某个时间段会有大量用户登录.当天系统开始有用户报障,发布系统线上无法构建 ...

  3. Http持久连接与HttpClient连接池

    以下文章来源方志朋的博客,回复"666"获面试宝典 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp so ...

  4. 一次 Druid 连接池泄露引发的血案!

    最近某个应用程序老是卡,需要重启才能解决问题,导致被各种投诉,排查问题是 Druid 连接池泄露引发的血案.. 异常日志如下: ERROR - com.alibaba.druid.pool.GetCo ...

  5. Http 持久连接与 HttpClient 连接池

    转载自  Http 持久连接与 HttpClient 连接池 一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连 ...

  6. HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查

    HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查 参考文章: (1)HttpCli ...

  7. 问题备忘: httpclient连接池异常引发的惨案

    1. 问题描述 客户端A --> Ngnix --> 服务B Ngnix做服务B的负载,客户端访问服务B时,客户端偶尔会有抛出TimeoutException异常. 举个例子:如A在09: ...

  8. HttpClient连接池设置引发的一次雪崩

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://i7q.cn/50G6cx - 1 - 事件背 ...

  9. HttpClient 连接池设置引发的一次雪崩!

    - 1 - 事件背景 我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务.最近经常出现Address already in use (Bind fai ...

最新文章

  1. spring boot 中json数据处理
  2. 存档丢失以后再补之R语言与logistic模型
  3. Python HTTP库:requests快速入门
  4. [转] 年终回顾,为你汇总一份「前端技术清单」
  5. em算法 实例 正态分布_人人都能看懂的EM算法推导
  6. android textview 设置单行最大宽度和ellipsize省略号时整体变短的问题
  7. 计算机课集体备课,《计算机应用基础》集体备课方案
  8. eclipse汉化教程(官方汉化包,傻瓜式操作,附带中英文快捷切换方式以及常见问题解决方案)
  9. 【Arduino创意】基于蜂鸣器制作摩尔斯电码生成器
  10. LeNet5—论文及源码阅读
  11. linux篇【12】:网络套接字<前序>—网络基础+udp套接字
  12. 区块链学习笔记一 BTC密码学原理
  13. librosa@soundFile音频读取和绘图@声道@通道@包络
  14. 华为云服务权限在哪_华为云资源IAM精细控制权限实践
  15. Automatic differentiation in PyTorch
  16. Quick--组件与基本元素
  17. jquery 垂直无限轮播
  18. 童鞋们,我模拟了Google的电吉他,可录音,支持键盘
  19. 基于Tushare的数据搜集与沪市选股
  20. 如何找到您的Android手机的IMEI号码

热门文章

  1. InfluxDB数据库
  2. java画板教程_使用Java制作简易的画板教程
  3. linux环境下MongoDB安装过程详解
  4. vue.js占位html标签,Vue中占位符如何使用
  5. LeetCode 649 Dota2参议院 HERODING的LeetCode之路
  6. Pico Neo 3 VR开发(Unity XR SDK)1
  7. 利用Python解决最短路径问题
  8. linux中对文件中列编辑,在LINUX中,要编辑某个文件的内容,可使用______命令。
  9. 32位和64位的区别的位是什么意思
  10. Matlab中对窗体进行部分截图