ElasticSearch 查询时内存溢出导致Eurake客户端不停重启
2017-09-22 18:15
288 查看
一天晚上,生产环境升级,升级的主要内容是将用户服务折分出去,并用户数据从mongo中复制到ES中助力查询。在测试环境和预发环境都测试通过, 然后在生产环境, 一次后台查询导致整个系统崩溃。
后来查找到原来是很早以前的一段代码,将所有用户都查询出来然后进行分析,导致用户服务直接挂掉,ES不能正常服务(对外服务断断续续),所有服务连接ES都是断断续续的,导致使用ES的服务(Eurake客户端)不停的重启, 状态从UP或DOWN之间不停的更换(Saw local status change event StatusChangeEvent [timestamp=1506004119798, current=DOWN, previous=UP]),致使整系统不能正常提供服务。
事件过程:
在测试环境查询用户列表超1W行以后的数据时,ES报错: Result window is too large, from + size must be less than or equal to: [10000] but was [10020]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter
这是因为ES提示结果窗口太大了,目前最大值为10000,而我们却请求查找到10020行。并提示我们使用scroll api这种更有效率的方式进行查询。或者修改index.max_result_window,但是ES不建议这样做,因为会消耗更多内存(从这次经历来看,也会导致ES不能提供正常的服务)。
由于没有时间去研究scroll api,所以我们修改了index.max_result_window,由于测试环境数据量相对生产环境来说算小的,所以测试环境抗下来了,而生产环境就直接挂了。
关于这次升级故障后对系统进行优化的方案,以后再发表吧。
另外提一下,scroll api是ES推荐的用于深度分页的方式.
后来查找到原来是很早以前的一段代码,将所有用户都查询出来然后进行分析,导致用户服务直接挂掉,ES不能正常服务(对外服务断断续续),所有服务连接ES都是断断续续的,导致使用ES的服务(Eurake客户端)不停的重启, 状态从UP或DOWN之间不停的更换(Saw local status change event StatusChangeEvent [timestamp=1506004119798, current=DOWN, previous=UP]),致使整系统不能正常提供服务。
事件过程:
在测试环境查询用户列表超1W行以后的数据时,ES报错: Result window is too large, from + size must be less than or equal to: [10000] but was [10020]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter
这是因为ES提示结果窗口太大了,目前最大值为10000,而我们却请求查找到10020行。并提示我们使用scroll api这种更有效率的方式进行查询。或者修改index.max_result_window,但是ES不建议这样做,因为会消耗更多内存(从这次经历来看,也会导致ES不能提供正常的服务)。
由于没有时间去研究scroll api,所以我们修改了index.max_result_window,由于测试环境数据量相对生产环境来说算小的,所以测试环境抗下来了,而生产环境就直接挂了。
关于这次升级故障后对系统进行优化的方案,以后再发表吧。
另外提一下,scroll api是ES推荐的用于深度分页的方式.
相关文章推荐
- 使用axis2构建webservice时客户端内存不断增长导致应用服务器频繁重启的解决方案
- 使用axis2构建webservice时客户端内存不断增长导致应用服务器频繁重启的解决方案 .
- 使用axis2构建webservice时客户端内存不断增长导致应用服务器频繁重启的解决方案
- 解决因数据库一次查询数据量过大导致的内存溢出问题
- 完美解决因数据库一次查询数据量过大导致的内存溢出问题
- 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)
- substring 导致内存溢出
- 全量导入数据 导致solr内存溢出 崩溃问题解决
- 解决mysqldb查询大量数据导致内存使用过高的问题
- 解决RabbitMQ队列超长QueueingConsumer导致JVM内存溢出的问题
- Java中,String的subString方法易导致内存溢出
- 多线程导致内存溢出。什么原因?
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
- oracle 中通过使用客户端导致查询出来的中文数据为乱码的解决方式
- 由于使用JDBC ResultSet的滚动功能而导致的内存溢出
- ElasticSearch(9)--使用Java客户端进行分页查询
- Java之JVM调优案例分析与实战(2) - 集群间同步导致的内存溢出
- Android 异步获取网络图片并处理导致内存溢出问题解决方法
- JDBC的批量查询报告内存溢出解决方法
- Elasticsearch批量更新索引导致内存溢出问题