[英]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.