ElasticSearch系列(七)es內(nèi)存大小設(shè)置
近期發(fā)現(xiàn)線上es服務(wù)內(nèi)存告警,使用率超過90%,需要處理,下面記錄下處理流程。
1. 查看進程內(nèi)存占用情況
使用top命名,可以顯示進程列表,
然后鍵盤按下M鍵,可以按照內(nèi)存降序,結(jié)果如下:
elastic+就是es的進程。
2.查看es配置的內(nèi)存大小
使用 ps -ef | grep java (或者按照上面的進程號找),顯示java進程,如下是es進程:
可以看到es進程啟動時設(shè)置的java堆內(nèi)存為-Xms5g -Xmx-5g,也就是5g,這兩個參數(shù)一般建議設(shè)置成一樣。
修改之前,這里設(shè)置的是6g,物理總內(nèi)存為8g,所以光es進程就占用了75%;有個疑問是,75%而已,為什么實際使用內(nèi)存到了90%呢?服務(wù)器上也沒有安裝其他占用內(nèi)存較大的服務(wù)。
原因:這是因為,es內(nèi)核使用lucene,lucene本身是單獨占用內(nèi)存的,并且占用的還不少,官方建議設(shè)置es內(nèi)存,大小為物理內(nèi)存的一半,剩下的一半留給lucene。
由此看來,之前線上把es內(nèi)存設(shè)置為6g(物理內(nèi)存8g)并不合理,修改為4g比較合適。
另外,es官方提了api查詢集群各個節(jié)點的狀態(tài),比如 GET /_cat/nodes ,
http://localhosts:9002/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master詳見官方文檔:
https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-nodes.html
3.如何修改es內(nèi)存
有網(wǎng)上說,設(shè)置es內(nèi)存的方法為:
設(shè)置環(huán)境變量:export ES_HEAP_SIZE=4g
或者,在程序啟動的時候把內(nèi)存大小傳遞給它:/bin/elasticsearch -Xmx4g -Xms4g ;
但是我實際操作后,發(fā)現(xiàn)并沒有生效,可能是es版本的原因吧,我目前線上使用的es版本為5.6.4。
正確設(shè)置內(nèi)存的方式:修改jvm.options文件:
此文件一般在安裝目錄下,或者使用 whereis elasticsearch 命令,列出es相關(guān)的文件路徑,都找一找。
打開此文件,其中有如下內(nèi)容:
上面默認(rèn)是注釋掉的,默認(rèn)使用1g內(nèi)存;我們線上設(shè)置了6g,現(xiàn)在我們修改為4g,重啟es集群即可。
