项目报错:打开文件过多,数据库连接失败等资源问题
2017-05-07 00:00
405 查看
背景:公司一java工程,该工程中使用到了elasticsearch的客户端,自己写了一个客户端的连接池,使用的是org.apache.commons.pool.BasePoolableObjectFactory;
但是重写销毁对象的方法直接调用了super的方法(第一次用,也没看super的实现);
在开始量小的时候跑的很欢,因为项目不断更新,相当于不定期的重启,没什么问题。但是最新量上来之后,经常报打开文件过多的错误,并伴随着其他错误,比如数据库链接失败,httpclient报UnknownHostException等一系列关于资源的错误。
排查:使用losf命令发现该工程使用的文件句柄高达80万,已经到达系统设置打开文件上限了,所以导致文件过多,数据库链接不上等问题。在手动调高系统打开文件的数量后,发现打开文件数还在不停的上涨,所以该问题基本判定是资源文件使用但是没有释放导致,且没有可用的资源导致一系列的相关错误问题。说明代码对于资源使用存在严重没有释放调用的问题。首先找httpclient是否关闭资源,然后再查看依赖第三方的客户端是否关闭资源,就找到了es客户端连接池在销毁对象的时候只调用了super的方法,但是查看父方法的实现是空的!!!坑了,调用super的方法没用,所以这里需要对销毁的对象调用相应的关闭资源方法,不同资源关闭资源的方法不一样,我这是是es客户端对象,该对象有个close方法
抓紧修改上线。。。
总结:在实现自己的连接池的时候需要记住释放资源,并且在使用父方法的时候一定要看下实现!!确定父方法的相关逻辑是自己预期的!!!
虽然也有数据库链接不上的问题报错,但是都是因为文件打开过多,导致一系列的问题出现,并不是网络或者数据库出现问题。问题不能只看表面
但是重写销毁对象的方法直接调用了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(); }
抓紧修改上线。。。
总结:在实现自己的连接池的时候需要记住释放资源,并且在使用父方法的时候一定要看下实现!!确定父方法的相关逻辑是自己预期的!!!
虽然也有数据库链接不上的问题报错,但是都是因为文件打开过多,导致一系列的问题出现,并不是网络或者数据库出现问题。问题不能只看表面
相关文章推荐
- vs2012创建或打开浏览数据库文件.sdf文件失败,intellisense不能用于c++项目,F12 不能跳转到定义处
- sqlite打开路径含中文的数据库文件失败的问题
- 关于打开现有项目时数据库连接配置遇到的问题 连接字符串中的数据源值指定未安装的SQL Server的实例。要解决此问题,可选择安装匹配的SQL Server实例或修改连接字符串中的数据源值
- 解决打开文件过多的问题
- 与personal database不同SDE连接数据库发布的资源,在进行查询时出现问题(arcgis server 9.2)。
- 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中[解决方法]
- html嵌入applet,跨ip时报数据库连接失败问题解决
- 解决.NET下Web项目打开失败的问题
- 解决Protege使用中的一个问题:从已有owl文件建立项目失败(w3china)
- asp+sql2005 数据库打开连接问题
- Windows7+VS2008打开项目报错关闭的问题
- 将一个项目从Vb6升级到VB.NET,升级完毕无法打开项目文件,项目文件名变为.vbproj.vs7.vbproj的问题
- '用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联,做JSP项目连接数据库
- 解决.NET下Web项目打开失败的问题(转)
- 数据库问题——error: 40 - 无法打开到 SQL Server 的连接
- 全面解决.NET下Web项目打开失败的问题(也可用于.NET下Web项目的迁移)
- 问题描述:客户端连接数据库报错,ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄
- 关于插件项目中连接数据库的问题
- 解决.NET下Web项目打开失败的问题
- Oracle表空间文件损坏导致的数据库异常关闭并启动失败问题的解决方法