elasticsearch 如何防止Elasticsearch使用这么多内存?,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 如何防止Elasticsearch使用这么多内存?,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 如何防止Elasticsearch使用这么多内存?

elasticsearch 如何防止Elasticsearch使用这么多内存?,elasticsearch,kibana,elasticsearch,Kibana,我正在尝试使用Kibana来可视化一些我已经摄入Elasticsearch的Bro记录。我加载了约1个月的记录(总共约30亿条记录,约4TB)。数据被摄取并编入索引而不会出现问题。我可以在Kibana中构建一些简单的可视化,但当我尝试加载我创建的仪表板(其中包括12个不同的可视化,并启动至少那么多Elasticsearch查询)时,我开始出错 我正在运行一个包含5个数据节点的7节点Elasticsearch群集: host001 192.168.1.1 18 8 0.00 - * Feron

我正在尝试使用Kibana来可视化一些我已经摄入Elasticsearch的Bro记录。我加载了约1个月的记录(总共约30亿条记录,约4TB)。数据被摄取并编入索引而不会出现问题。我可以在Kibana中构建一些简单的可视化,但当我尝试加载我创建的仪表板(其中包括12个不同的可视化,并启动至少那么多Elasticsearch查询)时,我开始出错

我正在运行一个包含5个数据节点的7节点Elasticsearch群集:

host001 192.168.1.1 18  8  0.00 - * Feron  
host002 192.168.1.2 15  8  0.00 - - Dark Phoenix    
host003 192.168.1.3 58 21  0.25 d - Starbolt          
host004 192.168.1.4 37 23  0.07 d - Niles Van Roekel  
host005 192.168.1.5 47 29  0.10 d - Angel Salvadore    
host006 192.168.1.6 68 29 16.37 d - Candra            
host007 192.168.1.7 56 29 14.36 d - Algrim the Strong
elasticsearch.log错误的亮点如下:

不同字段的这些行的集合(当对字段数据使用太多内存时,断路器被击中,我认为这是我的问题的核心):

[2015-10-06 08:24:00265][WARN][index.breaker][Eric slaught][FIELDDATA]字段[AA]中新使用的内存3752926600[3.4gb]将大于配置的breaker:3745107148[3.4gb],正在中断

这些内容的集合(似乎即使使用断路器,Elasticsearch也会耗尽内存):

[2015-10-06 08:32:06279][WARN][netty.channel.socket.nio.AbstractNioSelector]选择器循环中出现意外异常。 org.elasticsearch.index.engine.CreateFailedEngineException:[bro-2015-10-06][2]为[dns#AVA9HeN5uS-hcepf0HbN]创建失败 位于org.elasticsearch.index.engine.InternalEngine.create(InternalEngine.java:262) 位于org.elasticsearch.index.shard.IndexShard.create(IndexShard.java:470) 位于org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:437) 在org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:149)上 位于org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:515) 位于org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:422) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:744) 原因:org.apache.lucene.store.AlreadyClosedException:拒绝删除任何文件:此IndexWriter遇到不可恢复的异常 在org.apache.lucene.index.IndexFileDeleter.org上重新打开(IndexFileDeleter.java:354) 位于org.apache.lucene.index.IndexFileDeleter.deleteFile(IndexFileDeleter.java:719) 位于org.apache.lucene.index.IndexFileDeleter.deleteNewFiles(IndexFileDeleter.java:712) 位于org.apache.lucene.index.IndexWriter.deleteNewFiles(IndexWriter.java:4821) 位于org.apache.lucene.index.DocumentsWriter$DeleteNewFilesEvent.process(DocumentsWriter.java:749) 位于org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:4875) 位于org.apache.lucene.index.IndexWriter.processEvents(IndexWriter.java:4867) 位于org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1527) 位于org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1252) 位于org.elasticsearch.index.engine.InternalEngine.innerCreateNoLock(InternalEngine.java:343) 位于org.elasticsearch.index.engine.InternalEngine.innerCreate(InternalEngine.java:285) 位于org.elasticsearch.index.engine.InternalEngine.create(InternalEngine.java:256) ... 8个以上 原因:java.lang.OutOfMemoryError:java堆空间

然后是下面的一系列,我相信这是一个尝试在另一个节点上创建一个副本碎片(这将导致该节点失败,并开始一个连锁反应…我通过消除副本碎片消除了这个错误,但我更喜欢一个更好的解决方案)

[2015-10-06 08:38:35707][WARN][action.bulk][Eric Slaught]未能在远程副本[Tower][KxzEXAXKTCazjLzgOJE_aA][host005][inet[/192.168.1.5:9300]{master false}[bro 2015-10-06][8]上执行索引:数据/写入/批量 org.elasticsearch.transport.NodeDisconnectedException:[Tower][inet[/192.168.1.5:9300][index:data/write/bulk[s][r]]已断开连接

我知道解决这个问题的一种方法是横向扩展,但我没有这样的奢侈,我更希望能够正确利用我拥有的集群(特别是因为我只使用0.5TB的数据,而且还有更多可用数据)

我还研究了一些其他选项,可以在下面的映射中看到。数据的“doc_values”格式应该将字段数据加载到磁盘上,但它并不能完全消除这个问题。可能是因为其他原因占用了所有内存,或者是元字段(_type,_id,等等)造成的(因为我还没有找到一种方法来配置那些具有“doc_值”的字段)。我还在字符串字段中使用全局序号

如果有人需要有关我的群集或配置的更多信息,请告诉我!我真的被难倒了,所以提前感谢你们能提供的任何帮助

以下是我使用的映射模板:


以下是我的elasticsearch.yml配置:

每个索引有多少条记录?如果每个索引的记录数达到数十亿,您可能需要将索引拆分

^^我希望这是一个评论,但由于我的低声誉,我不能评论你的问题

从ElasticSearch的文档中:

您可能会惊讶地发现Elasticsearch没有加载到 fielddata只是与查询匹配的文档的值。信息技术 加载索引中所有文档的值,甚至包含 一个不同的类型


谢谢你的回复!目前,所有