问题
ES Request cannot be executed; I/O reactor status: STOPPED 报错解决
在使用ES和SpringBoot进行数据检索时,在接口中第一次搜索正常。第二次在搜索时在控制台就会输出Request cannot be executed; I/O reactor status: STOPPED错误
原因
本文错误是因为在使用ES客户端(RestHighLevelClient)客户端时连接断开,查看自己代码中与ES客户端连接的代码,中是否使用了client.close()方法,如果使用了方法请将方法注释掉,如果不注释的情况第一次查询完就会调用close()方法关闭连接。
try{
xxxx....
} catch (Exception ex) {
log.error("异常{}", ex.toString());
}finally{
// try {
// if (highLevelClient != null) {
// highLevelClient.close();
// }
// } catch (IOException e) {
// log.error("关闭 RestHighLevelClient 失败", e);
// }
}
以上代码说明一下,因为我们在使用spring boot 中使用了注入,RestHighLevelClient
的生命周期将由 Spring 容器进行管理,在应用关闭时会自动释放相关资源。
其它原因
一般请求失败问题可能以下几个原因导致:
1、客户端文件句柄耗尽
2、并发连接es的客户端太多
3、客户端连接es后长时间没有数据读写又没有及时close然后下次有数据读写又复用同一个连接
4、es负载太高
大家可以通过以上几种原因排查。