【问题标题】:How to optimize memory and heap usage Single node Elastic Search如何优化内存和堆使用单节点弹性搜索
【发布时间】:2021-01-23 08:46:16
【问题描述】:

我有一个单节点弹性搜索集群。它通过 Rancher(在 k8s 上运行 fluentd pod 来收集日志)从 Kubernetes 集群接收日志。 我在 centos 7 上将 elasticsearch 作为服务运行,并提供了 12 GB 的 JVM 堆空间,VM 有 23 GB 的 RAM。但弹性搜索仍然使用 VM 的所有 RAM,并在启动后因堆空间错误或 OutOFMemory 错误而不断关闭。

如果内存/堆几乎完全填满,我们可以设置一些配置来清除内存/堆以防止崩溃吗?

  1. 为什么即使只分配了 12 GB 的堆空间,elasticsearch 也会使用 VM 的所有 RAM?
  2. 为什么需要 15-20 分钟才能停止服务?
  3. 如何减少它的内存消耗?
  4. 如何减少弹性搜索传入数据的负载?

附言提前致谢。

【问题讨论】:

    标签: elasticsearch elastic-stack rancher efk


    【解决方案1】:

    您遇到的典型情况是您当前使用的堆/内存过小。鉴于这种用法,您似乎缺乏内存资源来处理您在 ES 实例上抛出的负载。有两种方法:

    1. 首先垂直扩展,即增加节点上的 RAM+堆大小,until you reach ~30GB heap(64GB RAM)
    2. 在 1 之后,如果您的节点仍然无法承受负载,请水平扩展,即添加一个新节点以在两个 VM 之间分散负载

    现在回答你的问题:

    1. Elasticsearch JVM 进程使用您分配的堆,但作为 Elasticsearch 核心的搜索引擎 Lucene 不通过堆并利用直接 RAM 内存,这就解释了为什么您会看到正在使用的剩余内存。我在上面分享的第一个链接中对此进行了解释
    2. 可能有很多原因
    3. 在不了解您的用例、您在做什么以及如何发送数据的情况下很难回答
    4. 同样的答案

    请随时提供有关容量、索引请求频率等的更多详细信息

    【讨论】:

    • 这个运气好吗?
    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多