前言
es集群 虚拟映射内存高?
ES5.x以后,对于lucene索引文件改为mmap
的方式进行访问,当索引被打开以后,ES会讲文件映射到虚拟内存空间,但并不会读取到物理内存里。 只有索引文件被访问的时候,才会通过os将读取的部分从磁盘page in到物理内存。 由于虚拟内存并不是实际的物理内存占用,并且os本身会管理映射内存的的page in/page out,看似很大很吓人的虚拟内存占用其实并无任何问题。 并且在物理内存足够的情况下,这种方式通常可以提升ES对索引文件的访问速度。参考:http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html
根据经验,如果按照官方的建议,给ES heap的内存少于机器可用物理内存的一半,通常不会有什么问题。 实际生产环境种,我们遇到过的相关问题场景: 预留的物理内存大大少于ES heap内存,从而在做大的查询聚合时,因为物理内存紧缺,mmap引起高频度的page in/page out,性能变得很差。