elasticsearch堆內存的配置建議
防止內存抖動
2:給多大的堆內存?
給ES的內存配置不是越大越好,建議不能超過32GB,不同jdk版本最大邊界值是不同的,對於32位小於32G JVM才采用內存對象指針壓縮技術,不然對象指針需要占用很大的內存; 一旦你越過那個神奇的30-32G的邊界,指針就會切回普通對象的指針,意味着就算給ES100G的內存,ES仍然最多使用30-32G的內存;
3、預留一半的內存給lucene
假如設備的內存是64G , 那就要預留出32G的內存給Lucene,Lucene的設計目的是把底層OS里的數據緩存到內存中。Lucene的段是分別存儲到單個文件中的,這些文件都是不會變化的,所以很利於緩存,同時操作系統也會把這些段文件緩存起來,以便更快的訪問。
建議是把50%的內存給elasticsearch,剩下的50%也不會沒有用處的,Lucene會很快吞噬剩下的這部分內存
4、*swapping**是性能的墳墓*
內存交換到磁盤對服務器性能來說是致命的。想想看一個內存的操作必須是快速的。 如果內存交換到磁盤上,一個100微秒的操作可能變成10毫秒,再想想那么多10微秒的操作時延累加起來。不難看出swapping對於性能是多么可怕。 最好的辦法就是在你的操作系統中完全禁用swapping
暫時禁用:sudo swapoff -a
永久禁用:
修改參數的方法是修改/etc/sysctl.conf文件,加入vm.swappiness=xxx,並重起系統。這個操作相當於是修改虛擬系統中的/proc/sys/vm/swappiness文件,將值改為XXX數值。
如果不想重起,可以通過sysctl -p動態加載/etc/sysctl.conf文件,但建議這樣做之前先清空swap。
以上系統參數配置完成,還要修改elasticsearch.yml配置:
bootstrap.memory_lock : true 鎖定內存,防止進行內存的交換使用swapping