连接ES的Java项目报Too many open files错误

启动后查询open files 数量

lsof -p TOMCAT_PID | grep wc -l

结果大概是一千多,但是短短数小时后就会涨到8k以上,所以使用网上很多朋友通过执行ulimit -n或修改limits.conf文件增加系统允许打开文件的数量方法未能解决问题。

查看了一下log,发现报的几个异常都和ESClient有关系:

None of the configured nodes are available

见到这个异常,又去找博客,解决办法是初始化client时去掉cluster.name参数。但,问题依旧!

rejected execution (shutting down) on org.elasticsearch.transport.netty.NettyTransport$2@6ea6ba8d
org.elasticsearch.transport.NodeDisconnectedException

接着又见到了这两个异常,查询elasticsearch的连接数量竟然又上千条之多。于是问题定位到了,ES连接数过多。检查代码,每次查询和写入都执行了innitClient()和closeClient()方法,感觉不到有什么逻辑错误或忘记关闭连接的情况。

最后还是咨询了大神,一语道破天机:

于是我将client实例改成单例实现,完美的解决了问题O(∩_∩)O~。

另外大神还说了:

于是我又把去掉的cluster.name给加上了^_^

虽然问题解决了,但是不懂啥原理。有时间还是要研究一下文档~

posted @ 2017-05-03 18:34  GoQC  阅读(2045)  评论(0编辑  收藏  举报