org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:412)
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:298)
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:238)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at com.sinosoft.search.service.spring.SearchServiceSpringImpl.getURLContent(SearchServiceSpringImpl.java:501)
at com.sinosoft.search.service.spring.SearchServiceSpringImpl.searchQuery(SearchServiceSpringImpl.java:148)
at com.sinosoft.search.service.spring.SearchServiceSpringImpl$$FastClassByCGLIB$$7ea0118.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
报错如上。应该是并发的情况导致的,还有其他情况会导致这个问题?
有什么办法解决吗?
3 个回复
HelloClyde
赞同来自:
1.增加超时
2.减少连接池队列
3.增加连接池初始化连接数量
选一个策略,或者多个策略组合
Jea - 一只猿
赞同来自:
其他方案都不太友好,增加超时业务可能会等待久,如果是分析任务那就随意
增加集群的负载节点,使用多个节点初始化连接池,还是增加连接池初始化数量,这个要钱,所以不推荐!就是
`node.master:false; node.data:false;`这种节点
不知道java能不连接复用啊,如果能的话那优化代码更好了
基本上@HelloClyde 说完了,就这几条,没了
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
1、减少并发请求,增大并发间隔。
2、从ES的线程池、队列角度看有没有优化提升空间,一定要结合硬件配置,不揠苗助长。