1、内存
ES是很吃内存的,es吃的主要不是你的jvm的内存,一般来说es用jvm heap(堆内存)还是用的比较少,主要吃的是你的机器的内存
ES底层基于Lucene,lucene是基于磁盘文件来读写和保存你的索引数据的,倒排索引,正排索引,lucene的特点就是会基于os filesystem cache,会尽量将频繁访问的磁盘文件的数据在操作系统的内存中缓存,然后尽量提升磁盘文件读写的性能
ES的性能80%取决于你的机器上,除了分配给jvm heap内存外,还剩下多少内存,剩下的内存会留给ES的磁盘索引文件做缓存,如果os cache能够缓存更多的磁盘文件的数据,索引文件的数据,索引读写的性能都会高很多,特别是检索
但是如果你的大量的索引文件在os cache中放不下,还是停留在磁盘上,那么搜索、聚合的时候大量的都是读写磁盘文件,性能当然相当低了,一个数据量级 ms级 s级
如果在ES生产环境中,哪种资源最容易耗尽,那么就是内存了。排序和聚合都会耗费掉很多内存,所以给ES进程分配足够的内存是很重要的。除了给jvm heap 分配内存,还需要给予足够的内存给os filesystem cache。因为lucene 用的数据结构都是给予磁盘的 的格式,es是通过os cache来进行高性能的磁盘读写的。
如果一个机器有64G的内存,那么比较理想的状态,如果32G 和 16G的内存也是Ok的
2、CPU
大多数的es集群对于cpu的要求相对较低一些,一般2-8核
3、磁盘
SSD固态硬盘 比机械硬盘 可以让ES 读写性能都高很多倍
4、JVM
官方不建议调整jvm参数配置