Elasticsearch maksimum bellek boyutu nasıl değiştirilir


99

Elasticsearch'ün varsayılan konfigürasyonuna sahip bir Apache sunucum var ve varsayılan konfigürasyonun maksimum 1GB boyutuna sahip olması dışında her şey mükemmel çalışıyor.

Elasticsearch'te saklayacak çok sayıda belgem yok, bu yüzden hafızayı azaltmak istiyorum.

-XmxJava yapılandırmasındaki parametreyi değiştirmem gerektiğini gördüm , ancak nasıl yapılacağını bilmiyorum.

Bunu uygulayabileceğimi gördüm:

bin/ElasticSearch -Xmx=2G -Xms=2G

Ancak Elasticsearch'ü yeniden başlatmam gerektiğinde bu kaybolacak.

Elasticsearch bir hizmet olarak kurulduğunda maksimum bellek kullanımını değiştirmek mümkün müdür?


Hangi işletim sistemi ve sürümü? Elasticsearch sürümü? Elasticsearch'ü nasıl kurdunuz?
James Addison

1
1 düğümlü bir kurulumda sahip olmanın bir avantajı olmadığından, çoğaltma ve parça sayısını düşürmek isteyebilirsiniz, bunu /etc/elasticsearch/elasticsearch.yaml adresine ekleyin: index.number_of_shards: 1 index.number_of_replicas: 0 Bu şekilde gereksiz işler yapmayarak bellek ve cpu'dan tasarruf edersiniz. .
neo112

Yanıtlar:


128

In ElasticSearch> = 5 dokümantasyon etti değişti yukarıdaki cevapların hiçbiri benim için çalıştı anlamına gelir.

Ben değiştirmeyi denedi ES_HEAP_SIZEiçinde /etc/default/elasticsearchve de etc/init.d/elasticsearch, ama ben koştum zaman ps aux | grep elasticsearchçıkış hala gösterdi:

/usr/bin/java -Xms2g -Xmx2g # aka 2G min and max ram

Bu değişiklikleri şurada yapmam gerekiyordu:

/etc/elasticsearch/jvm.options

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g 
-Xmx1g 
# the settings shipped with ES 5 were: -Xms2g
# the settings shipped with ES 5 were: -Xmx2g

3
Ve Mac OS /usr/local/opt/elasticsearch/libexec/config/jvm.options
10.12'de Elasticsearch

1
Bunun aws ami örneği için çalıştığını onaylayabilirim (RPM ile yüklenir), ancak önce / etc / sysconfig / elasticsearch ve bootstrap.memory_lock içinde MAX_LOCKED_MEMORY = sınırsız olarak ayarlayın: true /etc/elasticsearch/elasticsearch.yml
mork

2
Bu Windows'ta çalışmaz - doğru cevap burada: stackoverflow.com/questions/28798845/…
cbp

4
Homebrew yüklemeleri için dosya burada:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

24 Kasım 2016'da güncellendi : Elasticsearch 5, görünüşe göre JVM'yi yapılandırma yolunu değiştirdi. Bu yanıtı burada görün . Aşağıdaki cevap hala <5 sürümleri için geçerlidir.

tirdadc, aşağıdaki yorumunuzda bunu belirttiğiniz için teşekkür ederiz.


Hafıza ve ES'yi merak ederken başkalarıyla paylaştığım bir pastebin sayfam var. Benim için iyi çalıştı: http://pastebin.com/mNUGQCLY . İçeriği de buraya yapıştıracağım:

Referanslar:

https://github.com/grigorescu/Brownian/wiki/ElasticSearch-Configuration http://www.elasticsearch.org/guide/reference/setup/installation/

Bellek ve dosya numarası sınırlarını değiştirmek için aşağıdaki dosyaları düzenleyin. Bu talimatlar, Ubuntu 10.04'ün sonraki sürümlerde ve diğer dağıtımlarda / işletim sistemlerinde çalışabileceğini varsayar. ( Düzenleme : Bu, Ubuntu 14.04 için de çalışır.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default / elasticsearch (CentOS / RH'de: / etc / sysconfig / elasticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

4
Bu iyi görünüyor. ES_HEAP_SIZE öğesinin ne olması gerektiğini belirleme konusunda şu tavsiyem de var: Temel kural, ElasticSearch yığınının makinedeki kullanılabilir belleğin yaklaşık% 50'sine sahip olmasıdır. ElasticSearch, sistem önbelleklerini yoğun bir şekilde kullanır, bu nedenle onlar için yeterli bellek bırakmalısınız. ( asquera.de/opensource/2012/11/25/… adresinden )
Tom

17
CentOS'ta, /etc/default'/ etc / sysconfig' altında bahsettiğiniz yapılandırmaları görüyorum
Nishant

5
CentOS'ta /etc/sysconfig/elasticsearchbu değişiklikleri yapmak için uygun yer var. RPM, orada da bu dosyanın varsayılan bir sürümünü sağlar.
slm

5
Bu artık Elasticsearch 5 için geçerli değil, bu cevaba ihtiyacınız var .
tirdadc

2
Bu iyi görünüyor, ancak sınırlarımı özellikle /etc/security/limits.d/elasticsearch.conf
elasticsearch

26

Bunu Centos 7'de veya SystemD çalıştıran başka bir sistemde yapmak isteyenler için,

/etc/sysconfig/elasticsearch 

ES_HEAP_SIZE satırının açıklamasını kaldırın ve bir değer belirleyin, örneğin:

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

(1g max hakkındaki yorumu dikkate almayın - bu varsayılandır)



1
@Jonesome ne önerebileceğimden emin değil - CentOS 7'de ES RPM Paketinden ES 1.7.1 çalıştırıyorum ve bu dosyanın bulunduğu yol ve ES_HEAP_SIZE'ı değiştirmek amaçlandığı gibi çalışıyor.

9

Talimatlar ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

Ayarlamak

ES_HEAP_SIZE=512m

daha sonra:

sudo vim /etc/elasticsearch/elasticsearch.yml

Ayarlamak:

bootstrap.memory_lock: true

Dosyalarda daha fazla bilgi için yorumlar var


9

Benim durumumda önceki cevaplar yetersizdi, muhtemelen Debian 8'de olduğum için, daha önceki bir dağıtımdan bahsedilirken.

On Debian 8 hizmet komut normalde yerleştirmek değiştirmek /usr/lib/systemd/system/elasticsearch.serviceve eklemek Environment=ES_HEAP_SIZE=8G tıpkı diğer "Çevre = *" satırları altında.

Şimdi servis komut dosyasını ile yeniden yükleyin ve servisi systemctl daemon-reloadyeniden başlatın. İş yapılmalı!


1
teşekkürler, günümü kurtardın! evet, bu Debian 8 için doğru prosedür
hızlı2b

Bunu yapılandırmak için bir dosyayı değiştirmekten başka bir yer yok /usr/mu?
Martin Schröder

6

Elasticsearch'ün https://github.com/elasticsearch/elasticsearch-servicewrapper adresinde bulunan Github deposunda sağlanan hizmet paketleyicisini kullanırsanız, elasticsearch-servicewrapper / service / elasticsearch.conf adresindeki conf dosyası bellek ayarlarını denetler. Elasticsearch.conf dosyasının en üstünde bir parametredir:

set.default.ES_HEAP_SIZE=1024

Elasticsearch'ün ayrılan belleğini azaltmak için bu parametreyi azaltın, örneğin "set.default.ES_HEAP_SIZE = 512".

Elasticsearch-wrapper'ı kullanırsanız, elasticsearch.conf içinde sağlanan ES_HEAP_SIZE, TÜM DİĞER AYARLARI AŞIRIYOR. Bunu anlamam biraz zaman aldı, çünkü dokümantasyondan öbek belleğinin elasticsearch.yml'den ayarlanabileceği görüldü.

Hizmet sarmalayıcı ayarlarınız James'in örneğinde olduğu gibi / etc / default / elasticsearch gibi başka bir yerde ayarlanmışsa, oraya ES_HEAP_SIZE değerini ayarlayın.


2
ya hiç hizmetin yoksa? (ör. bin / elasticsearch -d komutunu çalıştırın)
Henley Chiu


@HenleyChiu daha sonra çalıştırmadan önce ES_HEAP_SIZE ortam değişkenini ayarlayın. yaniexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

ES 1.7.x stock elasticsearch.conf'ta (CentOS'ta rpm tarafından kurulan), set.default değeri yoktur. Bu yaklaşım ES 1.7'de çalışıyor mu?
Jonesome Reinstate Monica

Yukarıdaki cevap yanıltıcıdır. ES_HEAP_SIZE değerini / etc / sysconfig / elasticsearch içinde ayarlayın
Jonesome Reinstate Monica

6

ES'yi sağlanan RPM / DEB paketlerini kullanarak kurduysanız (sahip olduğunuz gibi), bunu init komut dosyasını ( /etc/init.d/elasticsearch on RHEL/CentOS) düzenleyerek ayarlayabilirsiniz . Dosyaya bakarsanız, aşağıdakileri içeren bir blok görürsünüz:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Boyutu ayarlamak için ES_HEAP_SIZEsatırı şu şekilde değiştirmeniz yeterlidir :

export ES_HEAP_SIZE=xM/xG

(burada x, ayırmak istediğiniz MB / GB RAM sayısıdır)

Misal:

export ES_HEAP_SIZE=1G

1GB tahsis eder.

Komut dosyasını düzenledikten sonra kaydedin ve çıkın, ardından hizmeti yeniden başlatın. Aşağıdakileri çalıştırarak doğru ayarlanıp ayarlanmadığını kontrol edebilirsiniz:

ps aux | grep elasticsearch

Ve java işleminde dönen -Xms ve -Xmx bayraklarını kontrol ederek:

/usr/bin/java -Xms1G -Xmx1G

Bu yardımcı olur umarım :)


1
Bunu bu şekilde yapma. Burası bu tür değişiklikleri yapmak için iyi bir yer değil. Bu dev bir hack! İşe yarayabilir, ancak ES güncellendiğinde potansiyel olarak çöpe gidecek.
slm

1
Eklemeliyim: Yukarıdaki yaklaşımı CentOS 7'de ES 1.7'de denedim ve hiçbir etkisi olmadı.
Jonesome Reinstate Monica

3
  • Elasticsearch, Xms (minimum yığın boyutu) ve Xmx (maksimum yığın boyutu) ayarları aracılığıyla jvm.options'da belirtilen tüm yığını atayacaktır.
    • -Xmx12g
    • -Xmx12g
  • Minimum yığın boyutunu (Xms) ve maksimum yığın boyutunu (Xmx) birbirine eşit olacak şekilde ayarlayın.
  • Xmx'i, JVM'nin sıkıştırılmış nesne işaretçileri (sıkıştırılmış hata) için kullandığı sınırın üstüne ayarlamayın, kesin kesme değeri değişir, ancak yaklaşık 32 GB'dir.

  • Yığın boyutunu bir ortam değişkeni aracılığıyla ayarlamak da mümkündür

    • ES_JAVA_OPTS = "- Xms2g -Xmx2g" ./bin/elasticsearch
    • ES_JAVA_OPTS = "- Xms4000m -Xmx4000m" ./bin/elasticsearch

Ayrıca, fiziksel RAM'in% 50'sinden fazlası değil
Achi Even-dar

Merhaba Ortam değişkenini böyle nasıl ayarlarım. Değişken adı ES_JAVA_OPTS ve değer: "-Xms2g -Xmx2g" ./bin/elasticsearch like
Manikandan

Ayrıca yığın boyutunun doğru şekilde güncellendiğini nasıl teyit
ederim

2

Elasticsearch yolu ana dizininde yani tipik olarak /usr/share/elasticsearch, bir yapılandırma dosyası vardır bin/elasticsearch.in.sh. Düzen parametresi ES_MIN_MEM, ES_MAX_MEMdeğişime bu dosyada -Xms2g, -Xmx4gsırasıyla. Ve lütfen bu yapılandırma değişikliğinden sonra düğümü yeniden başlattığınızdan emin olun.


1

Windows server kullanıyorsanız, Ortam Değişkenini değiştirebilir, yeni Ortam Değeri uygulamak için sunucuyu yeniden başlatabilir ve Elastic Service'i başlatabilirsiniz. Windows Server'da Elastik Yükleme bölümünde daha fazla ayrıntı


1

Elasticsearch 2.x'te:

vi /etc/sysconfig/elasticsearch 

Kod bloğuna git

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

Son satırın yorumunu kaldır

ES_HEAP_SIZE=2g
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.