elasticsearch6.1.3查询只返回部分数据或报错Data too large

这篇具有很好参考价值的文章主要介绍了elasticsearch6.1.3查询只返回部分数据或报错Data too large。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

1、ES导出报错CircuitBreakingException[[FIELDDATA] Data too large, data for [proccessDate] would be larger than limit of [10307921510/9.5gb]]
2、ES导出丢失数据,只返回范围内部分数据,同时未报错

问题原因

ES在查询时,会将索引数据缓存在内存(JVM)中。
当缓存数据到达驱逐线时,会自动驱逐掉部分数据,把缓存保持在安全的范围内。当用户准备执行某个查询操作时,缓存数据+当前查询需要缓存的数据量到达断路器限制时,会返回Data too large错误,阻止用户进行这个查询操作。ES把缓存数据分成两类,FieldData和其他数据,我们接下来详细看FieldData,它是造成我们这次异常的“元凶”。

ES配置中提到的FieldData指的是字段数据。当排序(sort),统计(aggs)时,ES把涉及到的字段数据全部读取到内存(JVM Heap)中进行操作。相当于进行了数据缓存,提升查询效率。
indices.fielddata.cache.size控制分配给fielddata多少堆内存。当在一个字段首次执行查询时,es会把它加载到内存中,同时添加到fielddata。如果fielddata超过了指定的堆内存,会从fielddata占用的内存中删除掉一些值。但是默认,这个设置是undounded,也就是没限制。这样,fielddata就会一直增加。但是,一旦它占用的内存超过了断路器规定的内存,就不会往里面加载更多fielddata了。
indices.breaker.fielddata.limit fielddata断路器默认限制fielddata占用堆内存的60%
indices.breaker.request.limit 请求断路器,估算请求或者聚合占用内存大小,默认限制大小为堆内存的40%
indices.breaker.total.limit 默认情况下,total断路器保证请求和fielddata断路器的和小与堆内存的70%
断路器的设置可以在config/elasticsearch.yml中设置,也可以动态更新:

PUT /_cluster/settings
{
"persistent" : {
"indices.breaker.fielddata.limit" : "40%"
}
}

当fielddata断路器的大小超过设置的值,就会出现开头提到的Data too large。
Data too large异常是ES默认配置的一个坑,我们没有配置indices.fielddata.cache.size,它就不回收缓存了。缓存到达限制大小,无法往里插入数据。
当前fieldData缓存区大小 < indices.fielddata.cache.size
当前fieldData缓存区大小+下一个查询加载进来的fieldData < indices.breaker.fielddata.limit
fielddata.limit的配置需要比fielddata.cache.size稍大。而fieldData缓存到达fielddata.cache.size的时候就会启动自动清理机制。
indices.breaker.request.limit限制查询的其他部分需要用的内存大小。indices.breaker.total.limit限制总(fieldData+其他部分)大小。

修改方式

修改vi /home/elasticsearch-6.1.3/config/elasticsearch.yml
增加

indices.fielddata.cache.size: 60%
indices.breaker.fielddata.limit: 70%

重启服务即可

拓展

下面这条可以不加
bootstrap.memory_lock: true

elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true
官网的解释 是:发生系统swapping的时候ES节点的性能会非常差,也会影响节点的稳定性。所以要不惜一切代价来避免swapping。swapping会导致Java GC的周期延迟从毫秒级恶化到分钟,更严重的是会引起节点响应延迟甚至脱离集群。
所以最好限制住elasticsearch占用的内存情况,可选少用swap
开启bootstrap.memory_lock: true后,在Elasticsearch集群启动的时候,会报如下错误

ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked

解决方法

方案1:
此方案适用于非systemd管理的linux发行版,centos 6及以下可以仅通过这个方案解决
临时解决

ulimit -l unlimited

永久解决

root权限编辑/etc/security/limits.conf
vi /etc/security/limits.conf
添加如下内容,保存退出

* soft memlock unlimited
* hard memlock unlimited

这里的*代表的是所有用户名称,可以更换为指定用户名
另:这里有个坑就是如果/etc/security/limits.d文件夹下的有配置文件,那么会覆盖刚才修改的文件,所以请确保该目录没有其它文件,如有请联系运维人员确认删除
编辑/etc/sysctl.conf

sudo echo "vm.swappiness=0" >> /etc/sysctl.conf

这个参数的作用是告诉Linux内核尽少的使用swap分区,不等于禁用swap,通过少使用swap来提高性能。
如果想立即生效而不是重启之后让sysctl.conf生效,请使用sysctl -p
重新登录或重启服务器方可生效

方案2:
适用于systemd管理的发行版,有文章提到centos 7需要使用此方案,本人使用debian 9.9.0 亲测解决问题,推荐先完成上边的方案后尝试本方案
这里还是推荐使用上边方法的第3步,尽少使用swap分区
在Centos7系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf与/etc/security/limits.d下的文件设置即可。
对于systemd service的资源设置,则需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同时也会加载两个对应目录中的所有.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf。system.conf是系统实例使用的,user.conf是用户实例使用的。
全局生效方式

vi /etc/systemd/system.conf

在最下方添加

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

保存, 重启系统
局部生效方式:(针对包管理器安装elasticsearch的形式)

sudo systemctl edit elasticsearch

此命令会在/etc/systemd/system下创建elasticsearch.service.d/override.conf文件
添加如下内容

[Service]
LimitMEMLOCK=infinity

保存,退出,执行如下命令生效

sudo systemctl daemon-reload

保存, 重启系统文章来源地址https://www.toymoban.com/news/detail-737061.html

到了这里,关于elasticsearch6.1.3查询只返回部分数据或报错Data too large的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch6.6.0设置访问密码

    首先破解 x-pack-core-6.6.0.jar 破解的方式大家可以参考 https://codeantenna.com/a/YDks83ZHjd 中5.破解x-pack 这部分 , 也可以直接下载我编译好的 https://download.csdn.net/download/iBuDongIt/88748782 下载后解压替换 elasticsearch-6.6.0/modules/x-pack-core/x-pack-core-6.6.0.jar即可 注意 : 先切换到 elasticsearch 所属的

    2024年01月17日
    浏览(39)
  • elasticsearch7与elasticsearch6配置的一点差异

    Elasticsearch 的核心是集群协调子系统。Elasticsearch 7 提供了一个新的集群协调子系  统,Elasticsearch 6.x 及之前的版本使用了一个叫作 Zen Discovery 的集群协调子系统,从 7.0 开始,如果你想要启动一个全新的集群,并且集群在多台主机上都有节点,那么你必须指定该集群在第一次

    2024年02月11日
    浏览(44)
  • 【ES实战】Elasticsearch6开始的CCR

    本文涉及官网文章地址 Overview Requirements for leader indices Automatically following indices Getting started with cross-cluster replication Upgrading clusters 跨集群复制 (CCR) 功能可以将远程集群中的索引复制到本地集群。 此功能可用于一些常见的生产用例: 主集群发生故障时的灾难恢复。 辅助集群可

    2024年01月15日
    浏览(38)
  • Elasticsearch6.x和7.x的区别

    在增删改方面, 6.x 和 7.x 是一样的,在查找方面(分为普通查找和有高亮的查找), 6.x 和 7.x 有区别。 在 7.x 的es中: org.springframework.data.elasticsearch.core.SearchResultMapper 没有这个类了 org.springframework.data.elasticsearch.core.ElasticsearchTemplate 已废弃 org.springframework.data.elasticsearch.repos

    2024年02月13日
    浏览(37)
  • elasticsearch6.8.23集群安装和设置密码

    一、下载安装包 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gz  二、安装步骤 1、准备三台机器,192.168.1.1、192.168.1.2、192.168.1.3 2、上传elasticsearch-6.8.23.tar.gz到三台机器的 /usr/local,然后都执行下面的命令 3、验证是否安装成功: curl 192.168.1.1:9200 浏

    2024年02月05日
    浏览(39)
  • 在ElasticSearch6.8及以上版本开启安全认证功能

    title: 在ElasticSearch6.8及以上版本开启安全认证功能 date: 2019-06-20 20:01:00 tags: elastic search es安全认证 categories: 搜索引擎 ElasticSearch 在6.8之前免费版本并不包含安全认证功能,之后版本有开放一些基础认证功能,对于普通用户来说是够用的。 免费版本 TLS 功能,可对通信进行加密

    2024年02月06日
    浏览(47)
  • elasticsearch6.3.2 http-basic身份验证插件安装

    下载地址 https://github.com/AlanYoun/elasticsearch6-http-basic/releases/download/v1.0.0/http-basic.zip 以下步骤需在es集群每台上操作 1、解压文件 将下载的zip包上传到 /opt/elk/elasticsearch-6.3.2/plugins 目录 unzip http-basic.zip 2、修改插件配置文件 vim plugin-descriptor.properties 修改elasticsearch版本为6.3.2 3、修

    2024年02月17日
    浏览(42)
  • Centos7安装Elasticsearch6.4.3和Kibana6.4.3

    一、下载好安装文件上传到/usr/local 二、安装Java环境 1)、解压jdk 2)、 配置Java环境变量 3)、profile末尾添加 4)、刷新配置文件 5)、检查是否安装成功 三、安装Elasticsearch 1)、解压安装包 2)、修改启动时默认Jvm参数,默认是1G,根据自己需求自行修改 我虚拟机内存不够改

    2023年04月22日
    浏览(45)
  • ElasticSearch6.x版本概念介绍以及在Kibana上增删改查的操作

    教学讲解视频地址:视频地址 1.接近实时(NRT Near Real Time ) Elasticsearch是一个 接近实时 的搜索平台。这意味着, 从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内) 2.索引(index) 一个索引就是一个拥有几分相似特征的文档的集合 。比如说,你可以有一个

    2023年04月24日
    浏览(45)
  • Mybatis分页查询同时返回总数和数据

    我们在使用Mybatis分页查询数据列表时,在用户的一个请求中常常需要同时返回当前页的列表数据以及满足条件的数据总条数用于分页。 1)执行两次SQL,一次查列表,一次查总数       这种方法最简单,也最容易实现。 2)分页插件PageHelper       另一种常用的方式就是使用

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包