溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

elasticsearch為什么只能分配最大內(nèi)存32G

發(fā)布時(shí)間:2020-06-27 09:33:56 來源:網(wǎng)絡(luò) 閱讀:1227 作者:hagretd 欄目:大數(shù)據(jù)

????elasticsearch分配內(nèi)存的方式:

????????1、設(shè)置變量的方式: export ES_HEAP_SIZE=32G? ?該方式比較好

????????2、啟動(dòng)es時(shí)添加啟動(dòng)參數(shù): -Xmx 32G -Xms 32G? ,Xmx和Xms的大小最好一樣,防止程序容易發(fā)生gc。

????

????es最大分配32G內(nèi)存的原因:

????1、內(nèi)存對(duì)于Elasticsearch來說絕對(duì)是重要的,用于更多的內(nèi)存數(shù)據(jù)提供更快的操作。而且還有一個(gè)內(nèi)存消耗大戶-Lucene

Lucene的設(shè)計(jì)目的是把底層OS里的數(shù)據(jù)緩存到內(nèi)存中。Lucene的段是分別存儲(chǔ)到單個(gè)文件中的,這些文件都是不會(huì)變化的,所以很利于緩存,同時(shí)操作系統(tǒng)也會(huì)把這些段文件緩存起來,以便更快的訪問。

Lucene的性能取決于和OS的交互,如果你把所有的內(nèi)存都分配給Elasticsearch,不留一點(diǎn)給Lucene,那你的全文檢索性能會(huì)很差的。

最后標(biāo)準(zhǔn)的建議是把50%的內(nèi)存給elasticsearch,剩下的50%也不會(huì)沒有用處的,Lucene會(huì)很快吞噬剩下的這部分內(nèi)存。不要超過32G

????2、不分配大內(nèi)存給Elasticsearch,事實(shí)上jvm在內(nèi)存小于32G的時(shí)候會(huì)采用一個(gè)內(nèi)存對(duì)象指針壓縮技術(shù)。

在java中,所有的對(duì)象都分配在堆上,然后有一個(gè)指針引用它。指向這些對(duì)象的指針大小通常是CPU的字長(zhǎng)的大小,不是32bit就是64bit,這取決于你的處理器,指針指向了你的值的精確位置。

對(duì)于32位系統(tǒng),內(nèi)存最大可使用4G。64系統(tǒng)可以使用更大的內(nèi)存。但是64位的指針意味著更大的浪費(fèi),因?yàn)槟愕闹羔槺旧泶罅恕@速M(fèi)內(nèi)存不算,更糟糕的是,更大的指針在主內(nèi)存和緩存器之間移動(dòng)數(shù)據(jù)的時(shí)候,會(huì)占用更多的帶寬。

java 使用一個(gè)叫內(nèi)存指針壓縮的技術(shù)來解決這個(gè)問題。它的指針不再表示對(duì)象在內(nèi)存中的精確位置,而是表示偏移量。這意味著32位的指針可以引用40億個(gè)對(duì)象,而不是40億個(gè)字節(jié)。最終,也就是說堆內(nèi)存長(zhǎng)到32G的物理內(nèi)存,也可以用32bit的指針表示。

一旦你越過那個(gè)神奇的30-32G的邊界,指針就會(huì)切回普通對(duì)象的指針,每個(gè)對(duì)象的指針都變長(zhǎng)了,就會(huì)使用更多的CPU內(nèi)存帶寬,也就是說你實(shí)際上失去了更多的內(nèi)存。事實(shí)上當(dāng)內(nèi)存到達(dá)40-50GB的時(shí)候,有效內(nèi)存才相當(dāng)于使用內(nèi)存對(duì)象指針壓縮技術(shù)時(shí)候的32G內(nèi)存。

這段描述的意思就是說:即便你有足夠的內(nèi)存,也盡量不要超過32G,因?yàn)樗速M(fèi)了內(nèi)存,降低了CPU的性能,還要讓GC應(yīng)對(duì)大內(nèi)存。


swapping是性能的墳?zāi)?/span>

????這是顯而易見的,但是還是有必要說的更清楚一點(diǎn),內(nèi)存交換到磁盤對(duì)服務(wù)器性能來說是致命的。想想看一個(gè)內(nèi)存的操作必須是快速的。

????如果內(nèi)存交換到磁盤上,一個(gè)100微秒的操作可能變成10毫秒,再想想那么多10微秒的操作時(shí)延累加起來。不難看出swapping對(duì)于性能是多么可怕。

????最好的辦法就是在你的操作系統(tǒng)中完全禁用swapping。這樣可以暫時(shí)禁用:
????sudo swapoff -a

????為了永久禁用它,你可能需要修改/etc/fstab文件

????sed -i 's/.*swap.*/#&/' /etc/fstab? ?


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI