尽管4GB ES_MAX_MEM,ElasticSearch仍然反复崩溃“HeapDumpOnOutOfMemoryError”

时间:2013-02-05 18:07:59

标签: elasticsearch

我正在通过

启动ElasticSearch
echo "export ES_HEAP_SIZE = 4096" >> /root/setenv
echo "export ES_MAX_MEM = 4096" >> /root/setenv
echo "export ES_MAX_MEM = 4096" >> /root/setenv

# finally,  we can start the app
echo 'Starting ElasticSearch...'
bin/elasticsearch -Xmx4g -Xms4g

然而,在没有时间(20分钟)之后,它变得没有反应,显然是由于HeapDumpOnOutOfMemoryError ......

[root@ip-***** api]# ps -ax | grep elasticsearch
 6225 ?        SLl    5:35 java -Xms256m -Xmx1g -Xss256k -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Delasticsearch -Des.path.home=/root/elasticsearch/elasticsearch-0.20.3 -cp :/root/elasticsearch/elasticsearch-0.20.3/lib/elasticsearch-0.20.3.jar:/root/elasticsearch/elasticsearch-0.20.3/lib/*:/root/elasticsearch/elasticsearch-0.20.3/lib/sigar/* -Xmx4g -Xms4g org.elasticsearch.bootstrap.ElasticSearch

编辑 - 我刚注意到这里输出的-Xms大小只有256米,尽管在启动时超过4g。我误解了什么吗?

FWIW,我在运行CentOS和Java v1.6.0_14-b08的Amazon EC2(m1.large instances => 8GB RAM)上

1 个答案:

答案 0 :(得分:4)

首先,设置ES_HEAP_SIZE不会帮助您自行防止内存错误。 Elasticsearch使用的内存量取决于您执行的查询类型:是否使用分面,排序,过滤,有多少字段,这些字段有多大,基数是什么等等。

其次,最好使用ES_INCLUDE脚本或service wrapper,而不是将命令行上所需的所有选项传递给elasticsearch脚本。

第三,当您正确设置ES_HEAP_SIZE环境变量时,您无需将-X选项传递给 elasticsearch 脚本。实际上,这些选项没有任何效果 - 脚本不会将它们传递给Java。使用ES_HEAP_SIZE变量来控制内存,并使用ES_JAVA_OPTIONS来控制要传递给Java的其他变量。