身安不如心安,屋宽不如心宽 。

es使用scroll分页查询,当设置的size超过200,报内存不足的错误

Elasticsearch | 作者 ljfphp | 发布于2019年05月07日 | 阅读数:5552

1、首先,楼主这里的环境是:
es-php + es7.0
 
2、问题
 
如图所示,代码如下
     "scroll" => "1m",
"size" => 200, //给出的值超过200,就开始报错:Out of memory (allocated 364904448) (tried to allocate 262144 bytes)

我这边的数据量是15000的测试数据,当size 设置小于200是可以正常查询的,当size设置大于200,就报错:
Out of memory (allocated 364904448) (tried to allocate 262144 bytes)
 
虽然可以设置程序的内存,但是更想知道造成这个问题的原因是什么,还是说我哪里操作的有问题。
 
谢谢大佬们的解答!!
 
已邀请:

rochy - rochy_he

赞同来自: ljfphp

只搜索一个字段的时候,这个意思是只返回一个字段么?
看情况是你一条记录也就是 _source 的内容比较大,所以一次返回 200 条的时候,每条记录的大小 * 200 > ES 设置的内存
当你只获取一个字段的时候,单个字段的大小 * 400 < ES 设置的内存

ljfphp - 叫我铁柱吧

赞同来自:

后续问题:
 
当我把搜索的字段压缩,只搜索一个字段的时候,size设置成400也没问题。那么意思是,一次预读的数据量太大了吗?scroll的大致运行原理我也知道一些,只是觉得挺奇怪的,毕竟ES是专门针对大数据的,我本地测试数据才15000,没道理啊

ljfphp - 叫我铁柱吧

赞同来自:

此贴终结。最终发现是本地php程序的原因,因为数组比较大,循环比较多,所以把php的内存占满了,ES默认的2G内存是完全够用的。感谢大佬的解答

要回复问题请先登录注册