經過一段時間運行,es的索引已經達到數十G以上。es采用mmap的方式將索引文件映射到內存中,隨着檢索的次數增加,越來越多的數據被操作系統讀入到內存中。這部分內存位於系統中,但是又不歸es管理,也就是和jvm配置的堆內存大小無關。
結果就是導致es總的內存不斷增長。
解決該問題的辦法是修改es的存儲方式,配置參數index.store.type由mmap改成niofs。niofs的性能也很好,對檢索的性能影響並不大,並且能夠有效的控制內存增長。可以認為這是一種按需讀取數據的方式,讀取的數據主要在系統的緩存中,這個內存是會被回收掉的,es的內存並不會瘋漲。
vim config/elasticsearch.yml
index.store.type: niofs
node.store.allow_mmap: false