3

経由で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

編集 -- 上記の起動時に 4g を渡しているにもかかわらず、ここでの出力の -Xms サイズがちょうど 256m であることに気付きました。私は何か誤解していますか?

FWIW、私は CentOS と Java v1.6.0_14-b08 を実行している Amazon EC2 (m1.large インスタンス => 8 GB の RAM) を使用しています。

4

1 に答える 1

4

まず、設定ES_HEAP_SIZEだけではメモリ不足エラーを防ぐことはできません。Elasticsearch が使用するメモリの量は、実行するクエリの種類 (ファセット、並べ替え、フィルタリングを使用するかどうか、フィールドの数、フィールドの大きさ、カーディナリティなど) によって決まります。

次に、コマンド ラインで必要なすべてのオプションをスクリプトに渡すのではなく、ES_INCLUDEスクリプトまたはサービス ラッパーelasticsearchを使用することをお勧めします。

第 3 に、環境変数を正しく設定すると、 elasticsearchスクリプトにオプションをES_HEAP_SIZE渡す必要がなくなります。実際、これらのオプションは何の効果もありません。スクリプトはそれらを Java に渡しません。変数を使用してメモリを制御し、 を使用して Java に渡す追加の変数を制御します。-XES_HEAP_SIZEES_JAVA_OPTIONS

于 2013-02-06T07:02:20.873 に答える