问题现象
业务端查询报错,错误信息如下:
Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting.
排查过程
查看官方文档,发现该问题是 7.6.2 版本已知的bug。
由于 bug 的原因,AtomicInteger openScrollContexts 会减少为负数,最后溢出为 Int_Max,这将使 open_scroll_contexts > max_open_scroll_context 始终为 true,无法再创建滚动游标。
为何服务重启后该问题不再发生?
因为服务重启后参数 open_scroll_contexts 会重置为默认值,导致 open_scroll_contexts > max_open_scroll_context 条件不生效,此时可以重新创建滚动游标,功能正常。
issue地址
pr地址
解决方案
临时解决方案
将 search.max_open_scroll_context 设置为 int 的最大值(2147483647)
使 open_scroll_contexts > max_open_scroll_context 条件永远不生效。
或者定期检查scroll_current的值,有问题时及时处理修复,操作方式如下:
# 检查集群的 scroll_current 值
curl http://ip:9200/_nodes/stats?pretty=true
# 手动清理 scroll_current
curl --location --request DELETE 'http://ip::9200/_search/scroll/_all'
永久解决方案
将ES版本升级至7.7以上, github.com/elastic/ela…