[英]Elasticsearch OutOfMemoryError Java heap space
我正在运行一个 8 核、32g RAM elasticsearch 节点,有 5 个分片,4 亿(小)文档。
一切正常,直到我运行 agg 搜索,然后分片开始失败:
java.lang.OutOfMemoryError: Java heap space
我更改了堆大小: export ES_HEAP_SIZE=16g
( ES_MAX_MEM
和ES_MIN_MEM
也相同)
还更改了 elasticsearch 的yml
文件:
bootstrap.mlockall: true
甚至(安装文档推荐):
sudo sysctl -w vm.max_map_count=262144
重启服务还是没影响,还是java.lang.OutOfMemoryError: Java heap space
还有其他建议吗? 除了不运行 agg 查询?
查询是:
https://localhost:9200/my_index_name/_search?search_type=count
{
"aggs": {
"distinct_hostname": {
"cardinality": {
"field": "hostname"
}
}
}
}
我想我发现了这个错误。 我使用'service'来运行elasticsearch,因此我的环境变量被剥离了。 我必须使用correcct env变量(特别是ES_HEAP_SIZE=16g
)更新/etc/default/elasticsearch
elasticsearch文件。
到目前为止,它运行良好,应用程序没有错误。
更新Elasticsearch 5的Java堆大小的正确方法不是EXPORT _JAVA_OPTIONS
或EXPORT ES_HEAP_SIZE
或使用命令行参数。 据我所知,所有这些都被Elasticsearch安装目录config/jvm.options
的配置文件覆盖。 要更改这些设置,您需要在该文件中编辑这些行:
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms2g
-Xmx2g
虽然这是一个老问题,但以下是如何在较新版本的 ELK(Elasticsearch、Kibana、Logstash)(v 5.0+) 中解决此问题:
配置您的jvm.options
文件以在堆上分配更多 memory。
您需要配置的选项是-Xms
和-Xmx
选项,它们默认设置为 1 GB RAM( -Xms1G
和-Xmx1G
)。 建议的大小不超过系统 RAM 的一半。 例如,在具有 32GB RAM 的 PC 上,您可以设置以下内容: -Xms16G
和-Xmx16G
。
这个文件可以在大多数 ELK 安装的/etc/elasticsearch/jvm.options
中找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.