【发布时间】:2021-02-21 05:12:54
【问题描述】:
问题:数据索引期间非常频繁的“403 请求因请求过多而受到限制”错误,这应该是memory usage 问题。
基础设施:
- Elasticsearch 版本:7.8
- t3.small.elasticsearch 实例(2 个 vCPU,2 GB 内存)
- 默认设置
- 单域,1 个节点,每个索引 1 个分片,无副本
有 3 个索引可搜索数据。其中两个有大约 100 万个文档(500-600 MB),一个有 25k(~20 MB)。索引不是很简单(有历史跟踪),所以我一直在用true、wait_for 值测试refresh,或者在需要时单独调用它。该过程使用搜索和批量查询(一直在尝试 500、1000 的大小)。 AWS 端应该有 10MB 的限制,所以这些是安全的。我还测试了在请求之间添加 0.5/1 秒的延迟,但这些摆弄都没有任何明显的好处。
该项目目前正在开发中,因此除了索引过程本身之外基本上没有流量。最小的索引通常需要每 24 小时更新一次,较大的索引需要每周更新一次。升级基础设施并不是我们想做的事情,因为索引太脆弱了。即使只连续两次更新 25k 数据索引也会因上述错误而失败。任何想法如何合理地解决这个问题?
2020 年 11 月 10 日更新
在过去的日志中进行了一些挖掘,发现我们曾经有429circuit_breaking_exception-s(而不是当前的403),原因在于[parent] Data too large, data for [<http_request>] would be [1017018726/969.9mb], which is larger than the limit of [1011774259/964.9mb], real usage: [1016820856/969.7mb], new bytes reserved: [197870/193.2kb], usages [request=0/0b, fielddata=0/0b, in_flight_requests=197870/193.2kb, accounting=4309694/4.1mb]。使用 cluster stats API 跟踪索引期间的内存使用情况,但没有发现任何可以确定为问题的直接原因的内容。
【问题讨论】:
标签: amazon-web-services elasticsearch