gpt4 book ai didi

elasticsearch - 了解 elasticsearch jvm 堆的使用

转载 作者:行者123 更新时间:2023-11-29 02:45:49 25 4
gpt4 key购买 nike

各位,

我正在尝试减少 elasticsearch 部署(单节点集群)中的内存使用量。

我可以看到正在使用 3GB JVM 堆空间。要优化我首先需要了解瓶颈。我对 JVM 的使用是如何划分的了解有限。

字段数据看起来消耗 1.5GB,过滤器缓存和查询缓存加起来消耗不到 0.5GB,最大加起来达到 2GB。

有人可以帮助我了解 elasticsearch 在哪里吃掉了剩余的 1GB 空间吗?

Marvel screenshot

最佳答案

我无法告诉您确切的设置,但为了了解您的堆中发生了什么,您可以将 jvisualvm 工具(与 jdk 捆绑在一起)与 marvel 或 bigdesk plugin 一起使用。 (我的偏好)和 _cat APIs分析正在发生的事情。

正如您正确地注意到的那样,堆托管三个主要缓存,即:

有很好的思维导图可用here (感谢 Igor Kupczyński)总结了缓存的作用。这为 ES 需要创建的所有其他对象实例留下大约 30% 的堆(在您的情况下为 1GB)以便正常运行(稍后查看更多相关信息)。

以下是我在本地环境中的处理方式。首先,我重新启动我的节点(使用 Xmx1g)并等待绿色状态。然后我启动了 jvisualvm 并将它连接到我的 elasticsearch 进程中。我从 Sampler 选项卡中获取了堆转储,以便稍后将其与另一个转储进行比较。我的堆最初看起来像这样(到目前为止只分配了最大堆的 1/3):

enter image description here

我还检查了我的字段数据和过滤器缓存是否为空:

enter image description here

为了确保,我还运行了 /_cat/fielddata,如您所见,自节点刚刚启动以来,字段数据还没有使用堆。

$ curl 'localhost:9200/_cat/fielddata?bytes=b&v'
id host ip node total
TMVa3S2oTUWOElsBrgFhuw iMac.local 192.168.1.100 Tumbler 0

这是初始情况。现在,我们需要稍微预热一下,所以我启动了我的后端和前端应用程序以对本地 ES 节点施加一些压力。

一段时间后,我的堆看起来像这样,所以它的大小或多或少增加了 300 MB(139MB -> 452MB,不多,但我在一个小数据集上运行了这个实验)

enter image description here

我的缓存也增长了几兆:

enter image description here

$ curl 'localhost:9200/_cat/fielddata?bytes=b&v'
id host ip node total
TMVa3S2oTUWOElsBrgFhuw iMac.local 192.168.1.100 Tumbler 9066424

在这一点上,我进行了另一个堆转储以深入了解堆是如何演变的,我计算了 retained size的对象,我将它与我在启动节点后进行的第一个转储进行比较。比较看起来像这样:

在保留大小增加的对象中,他通常怀疑是 map ,当然,以及任何与缓存相关的实体。但是我们也可以找到下面的类:

  • NIOFSDirectory用于读取文件系统上的 Lucene 段文件
  • 大量以字符数组或字节数组形式存在的字符串
  • 文档值相关类
  • 位组
  • 等等

enter image description here

如您所见,堆托管三个主要缓存,但它也是 Elasticsearch 进程需要的所有其他 Java 对象所在的地方,这些对象不一定与缓存相关。

因此,如果你想控制堆的使用,你显然无法控制 ES 正常运行所需的内部对象,但你绝对可以影响缓存的大小。如果您点击第一个项目符号列表中的链接,您将准确了解可以调整哪些设置。

此外,调整缓存可能不是唯一的选择,也许您需要重写一些查询以使其对内存更友好,或者更改您的分析器或映射中的某些字段类型等。在您的情况下很难说,如果没有更多信息,但这应该会给您一些线索。

继续按照我在这里所做的方式启动 jvisualvm,了解当您的应用程序(搜索+索引)访问 ES 时您的堆是如何增长的,您应该快速了解那里正在发生的事情。

关于elasticsearch - 了解 elasticsearch jvm 堆的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35741800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com