elasticsearch调优checklist-内存

硬件层面:

内存:

大小:

可在在bin下面的elasticsearch启动文件中设置ES_HEAP_SIZE=10g来指定大小。

如果你的排序和聚合比较多,那么要注意,他们非常的消耗内存,所以我们要分配足够大的内存,64G机器内存是一个理想的配置,但是32和16G的机器也比较常见。小于8G的机器会很麻烦(你最终会需要很多很多机器),当然超过64G也会有一些问题(通常,我们会留50%的内存给lucene,留下30.5G的内存给ES,如果分配给ES过多内存,反而会有不好的表现,在java中,所有的对象都存在于堆,然后由一个指针指向这些对象,这些指针大小通常取决于cpu是32位还是64位,在32位系统,意味着你的内存最大为4G,64位则内存更大,但是超过64bit的指针意味着浪费空间,因为这些指针很大,除此之外,更严重的是,更大的指针在内存和LLC,L1之间移动时将吃掉更多的带宽,java使用压缩指针的方式去避免这个问题,从而能让32位的指针指向约30.5G的内存大小,但是,一旦内存跨过这个边界,指针将会切回非压缩模式,这意味着每个指针变大,而更多带宽被消耗,所以说大于30.5G将不再使用压缩指针,从而会产生一种现象,就是30.5G的效果和40到50G的效果差不多,综上,一旦你大于30.5G,内存会浪费,CPU会变慢,GC也更艰难)。

swap:

1、一旦使用swap,你的ES表现将大大降低。所以我们通常swap

临时关闭sudoswapoff-a

永远关闭需要编辑/etc/fstab文件,请参照你所对应的操作系统

2、如果你不想完全关闭swap,可以系统使用他的阀值,设置sysctl,里面加入vm.swapness=1配置,这样系统在99%内存使用时,才会使用swap,请不要设置为0,设为0则在有的版本系统会被杀掉。

锁定内存,可以在elasticsearch.yml设置bootstrap.mlockall:true来保证JVM锁住内存不让系统做swap操作

相关推荐