文档章节

项目报错:打开文件过多,数据库连接失败等资源问题

 老鑫
发布于 2017/05/07 22:29
字数 608
阅读 34
收藏 0

背景:公司一java工程,该工程中使用到了elasticsearch的客户端,自己写了一个客户端的连接池,使用的是org.apache.commons.pool.BasePoolableObjectFactory;

但是重写销毁对象的方法直接调用了super的方法(第一次用,也没看super的实现);

@Override
public void destroyObject(Client obj) throws Exception {
    super.destroyObject(obj);
}

 

在开始量小的时候跑的很欢,因为项目不断更新,相当于不定期的重启,没什么问题。但是最新量上来之后,经常报打开文件过多的错误,并伴随着其他错误,比如数据库链接失败,httpclient报UnknownHostException等一系列关于资源的错误。

 

排查:使用losf命令发现该工程使用的文件句柄高达80万,已经到达系统设置打开文件上限了,所以导致文件过多,数据库链接不上等问题。在手动调高系统打开文件的数量后,发现打开文件数还在不停的上涨,所以该问题基本判定是资源文件使用但是没有释放导致,且没有可用的资源导致一系列的相关错误问题。说明代码对于资源使用存在严重没有释放调用的问题。首先找httpclient是否关闭资源,然后再查看依赖第三方的客户端是否关闭资源,就找到了es客户端连接池在销毁对象的时候只调用了super的方法,但是查看父方法的实现是空的!!!坑了,调用super的方法没用,所以这里需要对销毁的对象调用相应的关闭资源方法,不同资源关闭资源的方法不一样,我这是是es客户端对象,该对象有个close方法

 

@Override
public void destroyObject(Client obj) throws Exception {
    super.destroyObject(obj);
    obj.close();
}

 

抓紧修改上线。。。

 

总结:在实现自己的连接池的时候需要记住释放资源,并且在使用父方法的时候一定要看下实现!!确定父方法的相关逻辑是自己预期的!!!

虽然也有数据库链接不上的问题报错,但是都是因为文件打开过多,导致一系列的问题出现,并不是网络或者数据库出现问题。问题不能只看表面

© 著作权归作者所有

粉丝 2
博文 3
码字总数 1855
作品 0
海淀
私信 提问
mysql各类常见报错代码解释

1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目录导致...

飞奔的骆驼
2017/07/03
0
0
初接触 Sass 与Compass 遇到的几个坑

最近开始接触传说中高大上的CSS 预处理器之一Sass 以及Compass ,本文不会对Sass 与Compass 技术层面做过多介绍,只是记录自己折腾过程中遇到的几个坑。 前言 Jeff 本身也是刚接触Sass,因此...

Billydotzhang
2016/11/15
14
0
Web测试中定位bug方法

在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具、数据...

Li_思华年
2017/11/16
0
0
mysql 连接出错 'mysqladmin flush-hosts'

mysql 连接出错 'mysqladmin flush-hosts' 环境说明: 内网测试服务器192.168.18.251 为WEB服务器,安装了mysql; 内网音视频转码服务器192.168.18.253安装了转码工具,其上/www/attachment挂...

ShuaiDing
2014/09/12
0
0
前两天做项目遇到了sqlserver最大连接数 Max Pool Size 的问题

前言:出现这种问题使因为程序对connection的回收出现了问题,是因为你的代码出出现了过多new connection(),这种情况还是你的代码问题,如果不想把问题归根于程序,那你就可以改变config连接字符...

张子浩
2018/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机网络

计算机网络体系结构 OSI 其中表示层和会话层用途如下: 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。 会话层 :建立及管理会话。 五层...

一只小青蛙
今天
2
0
0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
2
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部