ES查询报错:entity content is too long [142501157] for the configured buffer limit [104857600]

ES查询entity content is too long [114829448] for the configured buffer limit [104857600]; nested excep 解决方案 工程添加类 package com.luding.task.config; import org.apache.http.HttpResponse; import org.apache.http.nio.protocol.HttpAsyncResponseConsumer; import org.elasticsearch.client.HeapBufferedAsyncResponseConsumer; import org.elasticsearch.client.HttpAsyncR 阅读详情
AI摘要

本文介绍了解决Elasticsearch查询时遇到的ContentTooLongException异常的方法,提供了两种解决方案,一种是通过自定义RequestOptions,另一种是通过Java反射调整默认配置。

java - org.apache.http.ContentTooLongException: entity content is too long [105539255] for the configured buffer limit [104857600] - Stack Overflow

在生产环境批量同步数据的时候,我写了一个查询请求,然后直接报错:entity content is too long [142501157] for the configured buffer limit [104857600]

具体内容如下:

Caused by: org.apache.http.ContentTooLongException: entity content is too long [142501157] for the configured buffer limit [104857600]
        at org.elasticsearch.client.HeapBufferedAsyncResponseConsumer.onEntityEnclosed(HeapBufferedAsyncResponseConsumer.java:76)
        at org.apache.http.nio.protocol.AbstractAsyncResponseConsumer.responseReceived(AbstractAsyncResponseConsumer.java:137)
        at org.apache.http.impl.nio.client.MainClientExec.responseReceived(MainClientExec.java:315)
        at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseReceived(DefaultClientExchangeHandlerImpl.java:151)
        at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.responseReceived(HttpAsyncRequestExecutor.java:315)
        at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:255)
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
        at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
        at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
        at java.lang.Thread.run(Thread.java:748)
        Suppressed: org.apache.http.ContentTooLongException: entity content is too long [142501157] for the configured buffer limit [104857600]
                ... 16 more
                Suppressed: org.apache.http.ContentTooLongException: entity content is too long [142501157] for the configured buffer limit [104857600]
                        ... 16 more

在HttpAsyncResponseConsumerFactory类中:

image-20210913091009287

在HeapBufferedAsyncResponseConsumer类中有一个判断:返回的内容长度大于限定的100MB就会抛出ContentTooLongException异常。

image-20210913091124017

我这里用的依赖是:

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-client</artifactId>
                <version>6.6.2</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>transport</artifactId>
                <version>6.6.2</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>6.6.2</version>
            </dependency>

            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>6.6.2</version>
            </dependency>

而我们对es进行查询操作,或者其他增删改操作是,都会默认使用如下的RequestOptions.DEFAULT

image-20210913092812479

进入RequestOptions.DEFAULT看它的代码:这里用了HeapBufferedResponseConsumerFactory.DEFAULT

image-20210913092930138

而这个HeapBufferedResponseConsumerFactory.DEFAULT,就是我们之前看到的,已经被限制了100MB返回值的HeapBufferedResponseConsumerFactory。

image-20210913093039286

所以有两种方式可以解决这个bug。

方式一:

不使用默认的RequestOptions.DEFAULT,而通过使用自定义RequestOptions的方式(ES官方api已经给我们开放出来了):

RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
builder.setHttpAsyncResponseConsumerFactory(
    new HttpAsyncResponseConsumerFactory
    //修改为500MB
    .HeapBufferedResponseConsumerFactory(500 * 1024 * 1024));

RequestOptions requestOptions=builder.build();

方式二:

如果不方便修改怎么办,例如我们使用的是Spring Data ElasticSearch或者是其他的一些框架,而它默认使用的也是RequestOptions.DEFAULT

image-20210913094849500

这时候我们可以通过java反射进行修改:

        //设置es查询buffer大小
        RequestOptions requestOptions = RequestOptions.DEFAULT;
        Class<? extends RequestOptions> reqClass = requestOptions.getClass();
        Field reqField = reqClass.getDeclaredField("httpAsyncResponseConsumerFactory");
        reqField.setAccessible(true);
        //去除final
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(reqField, reqField.getModifiers() & ~Modifier.FINAL);

        //设置默认的工厂
        reqField.set(requestOptions, new HttpAsyncResponseConsumerFactory() {
            @Override
            public HttpAsyncResponseConsumer<HttpResponse> createHttpAsyncResponseConsumer() {
                //500MB
                return new HeapBufferedAsyncResponseConsumer(5 * 100 * 1024 * 1024);
            }
        });

如果你使用的是springmvc,那么可以把这段代码加入到拦截器中,这样可以拦截需要自定义返回值大小的es请求

单节锂电池充电管理芯片应用原理阐述及应用领域 当电池电压超过2.9V时,采用恒流模式对电池充电,充电电流由PROG 管脚和GND之间的电阻RPROG确定。充电电压固定于4.2V,而充电电流可通过一个电阻器进行外部设置当充电电流在达到最终浮充电压之后降至设定值1/10时,WD4054将自动终止充电循环。在待机模式中,WD4054 对 BAT 引脚电压进行监控,只有当 BAT 引脚电压低于再充电阈值电压4.1V时(对应电池容量80%~90%),才会开始新的充电循环,重新对电池进行充电,这就避免了对电池进行不必要的反复充电,有效延长电池的使用寿命。 阅读详情

相关推荐

【SoloPi】SoloPi使用2-功能使用,录制回放

Soloπ是什么 Soloπ是一个无线化、非侵入式的Android自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。 录制回放功能 Soloπ拥有录制操作的能力,用户只需要通过Soloπ执行用例步骤,Soloπ就能够将用户的操作记录下来,并且支持在各个设备上进行回放,这一切都能够在手机上独立完成。 ...

q_Catherine的博客 5829

elasticsearch出现 entity content is too long问题解决

elasticsearch出现 entity content is too long问题解决 一、现象 ​ 项目中使用了[elasticsearch]的Java Low Level REST Client来操作es,低级客户端的特性就是需要手动控制对es的请求,所以会遇到一些请求过程中的问题。比如今天,线上环境在导出数据时es报错,提示 entity content is too long [145648701] for the configured buffer limit。大概意思是返回值过大,超过bu

重口味码农 1万+

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 435

ES查询时报错内容过大: entity content is too long for the configured buffer limit

问题: ES查询时报错 entity content is too long for the configured buffer limit。解决: 设置ES查询内容限制HeapBufferedResponseConsumerFactory.原因: 单次查询内容大小太大。

aCupxxx的博客 8384

开源光标主题实战:从Moshi Monsters到自定义指针的完整指南

光标主题是操作系统个性化的重要组成部分,它通过替换系统默认指针图标来改变视觉交互体验。其原理在于操作系统允许用户自定义指针资源文件,这些文件定义了不同状态下的光标图像。从技术价值看,一套设计良好的光标主题不仅能提升桌面美观度,还能增强用户的情感连接和操作愉悦感,是低成本高回报的数字幸福感提升方案。在应用场景上,无论是开发者、设计师还是普通用户,都可以通过更换光标主题来个性化工作环境。本文以热门的Moshi Monsters开源光标项目为例,深入解析了光标主题的设计逻辑、系统适配方案以及二次创作方法,涵盖了W

weixin_30879833的博客 556

多尺度变换(Multidimensional Scaling ,MDS)详解

介绍多尺度变换基本原理

5215

ES查询问题entity content is too long [142501157] for the configured buffer limit [104857600]

在@Configuration注释下,定义了一个名为ElasticSearchConfig的类,该类负责配置RestHighLevelClient以连接到Elasticsearch集群。这些属性包括用户名、密码和ES实例的URI。接着,定义了一个公共的RequestOptions实例COMMON_OPTIONS,以进行全局通用设置项、构建授权请求头、异步等信息。总之,这个文件定义了一个用于连接Elasticsearch的RestHighLevelClient,并设置了一些自定义参数。

m0_49790240的博客 1869

YOLOv11改进 - C3k2融合 | C3k2融合细节增强卷积DEConv(Detail-Enhanced Convolution)提升细微特征提取能力

本文介绍了细节增强卷积(DEConv)技术在YOLOv11中的结合应用。DEConv由标准卷积层和多种差异卷积层并行组成,通过计算像素差异和卷积操作增强特征提取能力,还采用重参数化技术简化模型结构。其优势在于能更好捕捉高频信息、保持参数数量不变且降低推理计算成本。我们将DEConv集成进YOLOv11,替换部分模块。

魔改工程师的博客 862

Elasticsearch常见问题(客户端篇)

客户端版本: 6.5.4报错截图: 问题原因: es返回的entity超过了默认的大小100x1024x1024(默认:104857600)解决方案: 方案一: 将 elasticsearch-rest-client-6.5.4.jar中org.elasticsearch.client.HttpAsyncResponseConsumerFactory类DEFAULT_BUFFER_LIMIT 加大为 150 * 1024 * 1024 即150M elasticsearch-rest-client-6.5

想和派大星一样 1352

最新2026年《网络数据安全风险评估办法》条款解读

大型企业集团IT变革下的零信任安全体系建设方案(55页).pptx。以数据安全为核心的安全立体防御体系解决方案(41页).pptx。让数据安全合规地创造价值(15页 PPT).pptx。大型集团数据安全应急预案(57页).docx。数据安全治理与评估服务业务介绍.pptx。数据安全管理实践(17页).pptx。大数据安全架构设计方案.pptx。大数据安全规划总体方案.pptx。数据库安全综合治理方案.pptx。医疗数据安全建设方案.pptx。数据安全框架规划图.pptx。数据安全治理方案.pptx。

cdfunlove的博客 47

ceph recovery 相关参数

可以修改的最大回填/恢复选项列在 “恢复/回填选项” 部分。mClock 的修改 默认回填/恢复限制由 osd_mclock_override_recovery_settings 选项,设置为 默认为 false。尝试修改任何默认恢复/回填限制而不设置门控选项,会将该选项重置为 mClock 默认值,并在集群日志中记录一条警告消息。请注意,默认值可能需要几秒钟才能恢复生效。请使用 config show 命令验证限制,如下所示。就直接设置以下参数,过一会就变回了默认值。简单点说官网的意思就是不设置。

weixin_40548182的博客 278

es 异常 org.apache.http.ContentTooLongException: entity content is too long 解决思路

问题:使用es 的java restHighLevelAPI 请求报错如下 Caused by: org.apache.http.ContentTooLongException: entity content is too long [349376897] for the configured buffer limit [104857600] at org.elasticsearch.client.HeapBufferedAsyncResponseConsumer.onEntityEnc

zhangjiaxx的博客 6100

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

java.io.IOException: entity content is too long [xxx] for the configured buffer limit [1048576]

java 使用 es hight-level-client 连接集群 ,滚动导出数据报错。但是我不想批量太小,影响处理速度。解决方案2:自定义一个 requestOptions。:response内容太大。buffer装不下了。,我的是滚动导出数据,可以调小批量的大小。

Angus 2210

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ES java client 搜索报错 entity content is too long[xxx1] for the configured buffer limit [xxx2]

应用同事反馈,在使用es的滚动导出的时候,一共有5567条数据,但是实际上只拿到4567条数据,并且打断点,最后一次是获取到了456条数据。所以可以判断,中间少了1000条数据。因为滚动导出是每次1000条。初步判断,是少了一次数据解析,有可能第一次构建请求的时候,没有解析数据。实际上并不是,看报错如下图,是 entity content is too long[xxx1] for the configured buffer limit [xxx2]

Angus 1390

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ES查询报错ContentTooLongException排查过程

(因为这里使用es的方式不是直接使用spring原生方式,而是自己包装了一层,根本原因可能还是自己的包装的实现里面有一些不合适的地方,用search去做searchAggregationsCount,search内就会走上兜底size为10000的逻辑,当然直接使用开源的spring方式集成可能也会有类似的问题)到这里问题其实比较清晰了,经过对比我手动请求es的命令里面没有带size,而程序请求es的报文里面带了size,导致将文档内容在hits中响应了回来,导致响应超大。

qq_33606378的博客 854

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Elasticsearch

什么是Elasticsearch? 基本概念 1、index 名词:相当于mysql的inser, 动词:相当于数据库 2、Type 存在inde中,可以定义一个或多个类型,相当于mysql的table。 3、倒排索引 所有的数据都会进行分词,然后保存到分词中,每个分词都会保存数据的索引。 docker安装 elasticsearch 创建实例 docker run -d --name es2 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-n

weixin_43988600的博客 824

问题 entity content is too long [145648701] for the configured buffer limit

请求内容超过默认限制。网上说是HeapBufferedResponseConsumerFactory里bufferLimit要改一下。找了好一会找到如何改这个bufferLimit,记录一下解决过程 private static RequestOptions getLongBufferRequestOptions(int bufferLimits) { HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory con

e274794140的专栏 2816

修改Java程序设置的缓冲区大小

这个错误的意思是 Java程序设置的缓冲区大小(104857600字节,即100MB)不足以处理输入实体内容的长度(124347600字节)复制这个接口,粘贴到此包下 org.elasticsearch.client。找到 RequestOptions 类。在查询ES时出现了下面的错误。这里表明了限制为100MB。

Konglquan的博客 736

【elasticsearch】问题解决:Remote responded with a chunk that was too large. Use a smaller batch size

一、前言 在使用reindex的方式来进行es索引跨集群迁移时,遇到的报错,这里整理并记录一下。 二、问题描述 es索引迁移命令: curl -u admin:admin -XPOST "http://10.1.36.14:9200/_reindex" -d ' { "source": { "remote": { "host": "http://10.11.36.142:29200", "username": "admin", "password": "

Mrerlou的博客 938

部署elk

elk

青春不流名 905

ES查询报错内容长度超过104857600

entiity content is too long xxx for the configured buffer limit 104857600 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600

fchen521的博客 2487

java调用elasticSearch api

java操作es有两种方式通过操作es的9300端口,9300是tcp端口,集群节点之间通信也是通过9300端口,会通过9300和es建立一个长连接,下面的es的依赖可以直接操作但是随着es的版本的提升spring-data需要封装不同版本的es的jar包,好像还没封装到这个版本(2019),另外官方也不推荐通过9300来操作es,而且这种方式在es8以后将被废弃通过9200操作,发送http请求我们在浏览官方文档的时候发现,js可以直接操作es,那为什么我们不直接用js来操作es呢?

梦想是很难很难的,所以先勇敢一点 3399

Elasticsearch Scroll 报错entity content is too long

high-level-rest api 在获取大量数据的时候报了这个错。之前的解决办法是修改Option 设置heap 大小,但是这次集群是使用的6.1.1 版本,没有这个参数。2024-06-24 15:22:01:568 ERROR [task-31] (ScrollFetcherProduceAction.java:129) 访问ES出错。我默认是5000,把这个改成小一些,一次http请求就不会返回那么多数据就可以解决。在代码中修改Scroll Request的 size() 函数。

doobetter的优快云 701

异常:java.io.IOException: entity content is too long [40400939] for the configured buffer limit [31457

这个缓冲区的大小在elasticsearch-rest-client依赖中会给一个默认值,代码溯源可知,是在RequestOptions类中调用的HttpAsyncResponseConsumerFactory接口中赋予,我代码中使用的7.6.2版本,默认值是100M。但异常信息中说的是因为超过了30M所以报错,与默认值不符,所以应该是有人在调用时对缓存区的大小进行了重新夫赋值。根据异常信息,报错原因是在处理输入流,即ES查询操作时,内容长度超过了配置的缓冲区限制。

weixin_41667076的博客 879

ElasticSearch 应用开发(七)Java Low Level Rest Client——Java API

1.概述 Java restclient分为两种:Java Low Level Rest Client(本节介绍重点)、Java HighLevel Rest Client(下节介绍)。 Java Low Level Rest Client Elasticsearch 官方低级客户端: 通过http协议 与Elasticsearch服务进行通信。请求编码和响应解码保留给用户实现。与...

腊八粥 4120
上一篇: com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘xxx‘:
下一篇: Elasticsearch Trying to create too many scroll contexts. Must be less than or equal to: [500]
qq_34412985
博客等级 码龄11年 143粉丝 983原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值