35

我目前正在使用弹性搜索 0.9.19。我使用的机器有大约 300GB 的磁盘空间,它的 RAM 大约是 23GB。我已经为弹性搜索分配了大约 10GB 的内存。我的操作是写密集型的。他们在身边1000docs/s。我只在机器上运行弹性搜索,没有其他进程。文档大小不大。它们很小,只有不超过 10 个字段。弹性搜索仅在一台具有 1 个分片和 0 个副本的机器上运行。

当我发送时,使用的内存开始迅速增加1000 docs/s。虽然我只为弹性搜索分配了 10GB 内存,但仍然消耗了将近 21GB 的内存,最终弹性搜索过程导致堆空间不足。稍后我需要清除操作系统缓存以释放所有内存。即使我停止发送弹性搜索,1000docs/s内存也不会自动清除。

因此,例如,如果我在运行弹性搜索时使用周围的1000doc/s写操作,我发现它很快就达到了 18 GB Ram 使用量,后来当我将写操作减少到只有 10 docs/s 时,使用的内存仍然显示在 18 左右国标。我认为这应该随着写操作数量的减少而下降。我正在使用 Bulk API 执行我的写入操作,每个查询的大小为 100 个文档。当写入操作约为 1000docs/sec 时,数据来自 4 台机器

这些是我在做 top 后得到的数字

内存:总计 24731664k,已使用 18252700k,空闲 6478964k,322492k 缓冲区

交换:总共 4194296k,使用 0k,免费 4194296k,缓存 8749780k

PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令

1004 弹性 20 0 10.7g 8.3g 10m S 1 35.3 806:28.69 java

请告诉是否有人有任何想法,这可能是什么原因。由于这个问题,我不得不停止我的申请。我想我缺少任何配置。我已经在这里 http://www.elasticsearch.org/guide/reference/index-modules/cache.html阅读了弹性搜索的所有缓存相关文档

我也尝试过使用清除缓存 API 清除缓存,也尝试过刷新 api。但没有得到任何改善。

提前致谢。

4

3 回答 3

3

总结邮件列表线程上的答案:问题在于 Ruby 客户端无法限制其插入,并且随着大量文档的添加,Lucene 内存使用量确实会增加。我认为提交频率也可能存在问题:不时提交以将新添加的文档刷新到磁盘很重要。OP还有问题吗?如果没有,您可以发布解决方案吗?

于 2013-12-10T16:32:34.037 回答
3

我认为您的摄取对于集群容量来说太重了。然后数据一直堆积在内存中。你应该监控你的磁盘 I/O,它应该是瓶颈。

你应该:

  • 减慢摄取速度(你可以使用更强大的队列,如 Kafka、Rabbit MQ 等……,或使用 logstash 的持久队列系统)
  • 使用快速SSD硬盘加速IO容量
  • 添加更多节点(并调整索引的分片)以获得更好的 I/O 并行性

作为小型优化,您可以通过以下方式稍微提高性能:

  • 增加 refresh_interval。此操作会消耗 RAM,因此当您在大量摄取节点时避免刷新可能会有很大帮助
  • 如果您在索引中进行第一次摄取,请尝试在摄取阶段删除所有副本,并在摄取后重新添加副本
于 2020-06-25T05:27:37.093 回答
0

要考虑的另一件事是弹性搜索的 RAM / 存储比率应该

是。1:16以获得最佳性能。

这意味着 - 如果您使用 64 GB 内存,那么存储空间将是 1024 GB 或 1TB。

于 2022-02-14T13:27:30.217 回答