美文网首页
记录一下ES (限制内存)

记录一下ES (限制内存)

作者: 简楼 | 来源:发表于2021-04-22 14:22 被阅读0次

    前言

    通过API操作es索引的时候也,碰到一个错误:

    Elasticsearch exception [type=circuit_breaking_exception,
    reason=[parent] Data too large,
    data for [<http_request>] would be [1532779328/1.4gb],---------------------A
    which is larger than the limit of [1503238553/1.3gb],---------------------B
    real usage: [1532779328/1.4gb], ---------------------C
    new bytes reserved: [0/0b],---------------------D
    usages [request=49152/48kb,
    fielddata=0/0b,
    in_flight_requests=1199478/1.1mb,
    accounting=940283/918.2kb]]

    问题解析

    1. B处的数就是上限,超过这个就报错。(缺省是它是ES最大内存的95%)
    2. C处的数值是你的本机上ES进程已使用的内存大小
    3. D处的数值1150就是你本次操作(或者说执行当前的任务)所需要内存
    4. C + D = A > B,所以报错了

    结果

    这就是内存问题;

    ES限制内存使用

    解决办法

    1. 增加内存, -Xmx(如果物理内存足够的话,在jvm.options修改)


      image.png
    2. 关闭CircuitBreaker检查(不建议),indices.breaker.type: none

    ES的内存优化配置

    indices.breaker.fielddata.limit
    fielddata 断路器默认设置堆的 60% 作为 fielddata 大小的上限。

    indices.breaker.request.limit
    request 断路器估算需要完成其他请求部分的结构大小,例如创建一个聚合桶,默认限制是堆内存的 40%。

    indices.breaker.total.limit
    total 揉合 request 和 fielddata 断路器保证两者组合起来不会使用超过堆内存的 70%。

    indices.fielddata.cache.size
    缓存回收大小,无默认值, 有了这个设置,最久未使用(LRU)的 fielddata 会被回收为新数据腾出空间;
    这个需要在elasticsearch.yml中配置。

    相关文章

      网友评论

          本文标题:记录一下ES (限制内存)

          本文链接:https://www.haomeiwen.com/subject/xsaxrltx.html