把你的内存的(少于)一半给 Lucene编辑
一个常见的问题是给 Elasticsearch 分配的内存 太 大了。 假设你有一个 64 GB 内存的机器, 天啊,我要把 64 GB 内存全都给 Elasticsearch。因为越多越好啊!
当然,内存对于 Elasticsearch 来说绝对是重要的,它可以被许多内存数据结构使用来提供更快的操作。但是说到这里, 还有另外一个内存消耗大户 非堆内存 (off-heap):Lucene。
Lucene 被设计为可以利用操作系统底层机制来缓存内存数据结构。 Lucene 的段是分别存储到单个文件中的。因为段是不可变的,这些文件也都不会变化,这是对缓存友好的,同时操作系统也会把这些段文件缓存起来,以便更快的访问。
Lucene 的性能取决于和操作系统的相互作用。如果你把所有的内存都分配给 Elasticsearch 的堆内存,那将不会有剩余的内存交给 Lucene。 这将严重地影响全文检索的性能。
标准的建议是把 50% 的可用内存作为 Elasticsearch 的堆内存,保留剩下的 50%。当然它也不会被浪费,Lucene 会很乐意利用起余下的内存。
如果你不需要对分词字符串做聚合计算(例如,不需要 fielddata )可以考虑降低堆内存。堆内存越小,Elasticsearch(更快的 GC)和 Lucene(更多的内存用于缓存)的性能越好。
按照官方建议把ES的内存设置成系统内存的一半,但是经过很长时间的监控,另一半内存并没有被所描述的Lucene使用,请问这样配置是否合理?是否浪费了我的内存?
如何分配内存更加合理些?
4 个回复
kennywu76 - Wood
赞同来自: laoyang360 、yayg2008 、kwan 、huangzhiwei
https://www.elastic.co/blog/a-heap-of-trouble
kennywu76 - Wood
赞同来自: kwan
medcl - 今晚打老虎。
赞同来自: kennywu76
yayg2008
赞同来自: