关于ES Request cannot be executed; I/O reactor status: STOPPED 异常原因查找

本文探讨了程序因内存溢出(OOM)导致的ES RestHighLevelClient请求失败问题。作者通过实例验证,OOM后即使释放内存并重启查询,仍会遇到I/O reactor stopped异常。解决策略集中在优化触发OOM的代码以避免此类问题。

项目场景:

项目用到ES 存储日志数据,


问题描述

程序使用RestHighLevelClient客户端,经常出现Request cannot be executed; I/O reactor status: STOPPED ,网上查找到原因大多是因为手动调用close()


原因分析:

查询出现异常前后的日志,发现前一天晚上有出现过OOM,第二天应用与查询ES相关的操作全部异常,怀疑因为OOM导致client 关闭,

为了验证猜测,写了个简单的测试用例,程序出现OOM后,休眠15秒,释放内存,继续调用client查询ES,抛出Request cannot be executed; I/O reactor status: STOPPED

​​​​​​​

 

	    List<MyCustomer> list = new ArrayList<>();
		new Thread(new Runnable() {
			
			@Override
			public void run() {

		        while(true){
		            list.add(new MyCustomer());
		        }
				
			}
		}).start();


		esTest.authLogTest();
		
		Thread.sleep(15000);
		list.clear();


解决方案:

优化导致OOM的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值