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操作
相关推荐
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。