Elasticsearch7.8.0版本优化——内存设置
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch7.8.0版本优化——内存设置相关的知识,希望对你有一定的参考价值。
目录
一、内存设置的概述
- ES 默认安装后设置的内存是 1GB,如果是通过解压安装的 ES,则在 ES 安装文件中包含一个 jvm.option 文件,Xms 表示堆的初始大小,Xmx 表示可分配的最大内存,都是 1GB。
- 确保 Xmx 和 Xms 的大小是相同的,其目的是为了能够在 Java 垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,可以减轻伸缩堆大小带来的压力。
二、Elasticsearch堆内存的分配的两个原则
-
不要超过物理内存的 50%
1、Lucene 的设计目的是把底层 OS 里的数据缓存到内存中。
2、Lucene 的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的访问。
3、如果我们设置的堆内存过大,Lucene 可用的内存将会减少,就会严重影响降低 Lucene 的全文本查询性能。
-
堆内存的大小最好不要超过 32GB
1、在 Java 中,所有对象都分配在堆上,然后有一个 Klass Pointer 指针指向它的类元数据。
2、这个指针在 64 位的操作系统上为 64 位,64 位的操作系统可以使用更多的内存(2^64)。 在 32 位的系统上为 32 位,32 位的操作系统的最大寻址空间为 4GB(2^32)。
3、但是 64 位的指针意味着更大的浪费,因为你的指针本身大了。浪费内存不算,更糟糕的是,更大的针在主内存和缓存器(例如 LLC, L1 等)之间移动数据的时候,会占用更多的带宽。
-
最终我们都会采用 31 G 设置,
-Xms 31g -Xmx 31g
-
假设你有个机器有 128 GB 的内存,你可以创建两个节点,每个节点内存分配不超过 32 GB。 也就是说不超过 64 GB 内存给 ES 的堆内存,剩下的超过 64 GB 的内存给 Lucene。
以上是关于Elasticsearch7.8.0版本优化——内存设置的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch7.8.0版本优化——一些重要配置解释