So ändern Sie die maximale Speichergröße von Elasticsearch


99

Ich habe einen Apache-Server mit einer Standardkonfiguration von Elasticsearch und alles funktioniert einwandfrei, außer dass die Standardkonfiguration eine maximale Größe von 1 GB hat.

Ich habe nicht so viele Dokumente in Elasticsearch zu speichern, daher möchte ich den Speicher reduzieren.

Ich habe gesehen, dass ich den -XmxParameter in der Java-Konfiguration ändern muss , aber ich weiß nicht wie.

Ich habe gesehen, dass ich dies ausführen kann:

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

Aber wenn ich Elasticsearch neu starten muss, geht dies verloren.

Ist es möglich, die maximale Speichernutzung zu ändern, wenn Elasticsearch als Dienst installiert ist?


Welches Betriebssystem und welche Version? Elasticsearch-Version? Wie haben Sie Elasticsearch installiert?
James Addison

1
Möglicherweise möchten Sie die Anzahl der Replikate und Shards verringern, da es keinen Vorteil gibt, sie in einem 1-Knoten-Setup zu haben. Fügen index.number_of_shards: 1 index.number_of_replicas: 0 Sie dies zu /etc/elasticsearch/elasticsearch.yaml hinzu: Auf diese Weise sparen Sie Speicher und CPU, indem Sie keine unnötigen Arbeiten ausführen .
Neo112

Antworten:


127

In ElasticSearch> = 5 hat sich die Dokumentation geändert , was bedeutet, dass keine der oben genannten Antworten für mich funktioniert hat.

Ich habe versucht , zu ändern ES_HEAP_SIZEin /etc/default/elasticsearchund in etc/init.d/elasticsearch, aber wenn ich lief ps aux | grep elasticsearchder Ausgang noch zeigte:

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

Ich musste diese Änderungen vornehmen in:

/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
Und für Elasticsearch 5.2 unter Mac OS 10.12 fand ich diese Datei in/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
Ich kann bestätigen, dass dies für eine aws ami-Instanz funktioniert (mit RPM installiert), aber zuerst MAX_LOCKED_MEMORY = unbegrenzt in / etc / sysconfig / elasticsearch und bootstrap.memory_lock setzen: true in /etc/elasticsearch/elasticsearch.yml
mork

2
Dies funktioniert nicht in Windows - die richtige Antwort ist hier: stackoverflow.com/questions/28798845/…
cbp

3
Für Homebrew-Installationen ist die Datei hier:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

Aktualisiert am 24. November 2016 : Elasticsearch 5 hat anscheinend die Konfiguration der JVM geändert.Sehen Sie diese Antwort hier . Die folgende Antwort gilt weiterhin für Versionen <5.

tirdadc, danke, dass du in deinem Kommentar unten darauf hingewiesen hast.


Ich habe eine Pastebin-Seite, die ich mit anderen teile, wenn ich mich über Speicher und ES wundere. Für mich hat es gut funktioniert: http://pastebin.com/mNUGQCLY . Ich werde den Inhalt auch hier einfügen:

Verweise:

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

Bearbeiten Sie die folgenden Dateien, um die Speicher- und Dateinummernbeschränkungen zu ändern. Diese Anweisungen setzen Ubuntu 10.04 voraus und funktionieren möglicherweise mit späteren Versionen und anderen Distributionen / Betriebssystemen. ( Bearbeiten : Dies funktioniert auch für Ubuntu 14.04.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default / elasticsearch (unter CentOS / RH: / etc / sysconfig / elasticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

4
Das sieht gut aus. Ich habe auch die folgenden Ratschläge zum Bestimmen, was ES_HEAP_SIZE sein soll: Die Faustregel lautet, dass der ElasticSearch-Heap ungefähr 50% des verfügbaren Speichers auf dem Computer haben sollte. ElasticSearch verwendet stark System-Caches, daher sollten Sie genügend Speicher für sie belassen. (von asquera.de/opensource/2012/11/25/… )
Tom

17
In CentOS sehe ich die Konfigurationen, die Sie /etc/defaultunter "/ etc / sysconfig"
Nishant

5
Unter CentOS /etc/sysconfig/elasticsearchist der geeignete Ort, um diese Änderungen vorzunehmen. Das RPM bietet dort auch eine Standardversion dieser Datei.
Slm

5
Dies gilt nicht mehr für Elasticsearch 5, Sie benötigen diese Antwort .
Tirdadc

2
Das sieht gut aus, aber ich habe meine Grenzen speziell für Elasticsearch-Benutzer gesetzt/etc/security/limits.d/elasticsearch.conf
radtek

26

Wenn Sie dies auf Centos 7 oder einem anderen System mit SystemD tun möchten, ändern Sie es in

/etc/sysconfig/elasticsearch 

Kommentieren Sie die Zeile ES_HEAP_SIZE aus und legen Sie einen Wert fest, z.

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

(Ignoriere den Kommentar zu maximal 1 g - das ist die Standardeinstellung)


Ich sollte hinzufügen: Ich habe den obigen Ansatz unter ES 1.7 unter CentOS 7 ausprobiert und er hatte keine Auswirkung
Jonesome Reinstate Monica

1
@Jonesome ist sich nicht sicher, was ich vorschlagen kann - ich verwende ES 1.7.1 aus dem ES RPM-Paket unter CentOS 7 und das ist der Pfad, in dem diese Datei vorhanden ist, und das Ändern von ES_HEAP_SIZE funktioniert wie beabsichtigt.

9

Anleitung für ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

einstellen

ES_HEAP_SIZE=512m

dann in:

sudo vim /etc/elasticsearch/elasticsearch.yml

Einstellen:

bootstrap.memory_lock: true

Es gibt Kommentare in den Dateien für weitere Informationen


9

Frühere Antworten waren in meinem Fall unzureichend, wahrscheinlich weil ich auf Debian 8 bin, während sie auf eine frühere Distribution verwiesen wurden.

Ändern Sie unter Debian 8 das normalerweise platzierte /usr/lib/systemd/system/elasticsearch.serviceDienstskript und fügen Sie es Environment=ES_HEAP_SIZE=8G direkt unter den anderen Zeilen "Environment = *" hinzu.

Laden Sie nun das Dienstskript mit neu systemctl daemon-reloadund starten Sie den Dienst neu. Die Arbeit sollte erledigt sein!


1
Danke, du rettest meinen Tag! Ja, dies ist das richtige Verfahren für Debian 8
schneller2b

Gibt es keinen anderen Ort, um dies zu konfigurieren, als eine Datei zu ändern /usr/?
Martin Schröder

6

Wenn Sie den Service-Wrapper verwenden, der im Github-Repository von Elasticsearch unter https://github.com/elasticsearch/elasticsearch-servicewrapper bereitgestellt wird, steuert die conf-Datei unter elasticsearch-servicewrapper / service / elasticsearch.conf die Speichereinstellungen. Am Anfang von elasticsearch.conf befindet sich ein Parameter:

set.default.ES_HEAP_SIZE=1024

Reduzieren Sie einfach diesen Parameter, beispielsweise "set.default.ES_HEAP_SIZE = 512", um den zugewiesenen Speicher von Elasticsearch zu reduzieren.

Beachten Sie, dass bei Verwendung des Elasticsearch-Wrappers die in elasticsearch.conf bereitgestellte ES_HEAP_SIZE ALLE ANDEREN EINSTELLUNGEN ÜBERSCHREITET. Ich brauchte ein wenig, um das herauszufinden, da aus der Dokumentation hervorgeht, dass der Heapspeicher über elasticsearch.yml festgelegt werden kann.

Wenn Ihre Service-Wrapper-Einstellungen an einer anderen Stelle festgelegt sind, z. B. unter / etc / default / elasticsearch wie in James 'Beispiel, legen Sie dort ES_HEAP_SIZE fest.


2
Was ist, wenn du überhaupt keinen Service hast? (dh einfach bin / elasticsearch -d ausführen)
Henley Chiu


@HenleyChiu setzt dann einfach die Umgebungsvariable ES_HEAP_SIZE, bevor sie ausgeführt wird. dhexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

In der ES 1.7.x-Datei elasticsearch.conf (die von der U / min unter CentOS installierte) gibt es überhaupt keinen set.default. Funktioniert dieser Ansatz unter ES 1.7?
Jonesome Reinstate Monica

Die obige Antwort ist irreführend. Setzen Sie ES_HEAP_SIZE in / etc / sysconfig / elasticsearch
Jonesome Reinstate Monica

6

Wenn Sie ES mit den bereitgestellten RPM / DEB-Paketen installiert haben (wie es scheint), können Sie dies anpassen, indem Sie das Init-Skript ( /etc/init.d/elasticsearch on RHEL/CentOS) bearbeiten . Wenn Sie sich die Datei ansehen, sehen Sie einen Block mit den folgenden Angaben:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Um die Größe anzupassen, ändern Sie einfach die ES_HEAP_SIZELinie wie folgt:

export ES_HEAP_SIZE=xM/xG

(wobei x die Anzahl der MB / GB RAM ist, die Sie zuweisen möchten)

Beispiel:

export ES_HEAP_SIZE=1G

Würde 1 GB zuweisen.

Nachdem Sie das Skript bearbeitet haben, speichern und beenden Sie es und starten Sie den Dienst neu. Sie können überprüfen, ob es richtig eingestellt wurde, indem Sie Folgendes ausführen:

ps aux | grep elasticsearch

Überprüfen Sie im Java-Prozess, der Folgendes zurückgibt, nach den Flags -Xms und -Xmx:

/usr/bin/java -Xms1G -Xmx1G

Hoffe das hilft :)


1
Mach es nicht so. Dies ist kein guter Ort, um diese Art von Änderungen vorzunehmen. Dies ist ein riesiger Hack! Könnte funktionieren, wird aber möglicherweise verworfen, wenn ES aktualisiert wird.
Slm

1
Ich sollte hinzufügen: Ich habe den obigen Ansatz unter ES 1.7 unter CentOS 7 ausprobiert und er hatte keine Auswirkungen.
Jonesome Reinstate Monica

3
  • Elasticsearch weist den gesamten in jvm.options angegebenen Heap über die Einstellungen Xms (minimale Heap-Größe) und Xmx (maximale Heap-Größe) zu.
    • -Xmx12g
    • -Xmx12g
  • Stellen Sie die minimale Heap-Größe (Xms) und die maximale Heap-Größe (Xmx) so ein, dass sie gleich sind.
  • Stellen Sie Xmx nicht über dem Grenzwert ein, den die JVM für komprimierte Objektzeiger (komprimierte Hoppla) verwendet. Der genaue Grenzwert variiert, liegt jedoch nahe 32 GB.

  • Es ist auch möglich, die Heap-Größe über eine Umgebungsvariable festzulegen

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

Auch nicht mehr als 50% des physischen RAM
Achi Even-dar

Hallo, wie ich Umgebungsvariable wie folgt einstelle. Variabler Name ist ES_JAVA_OPTS und Wert: "-Xms2g -Xmx2g" ./bin/elasticsearch like
Manikandan

Auch wie ich bestätige, Heap-Größe korrekt aktualisiert
Manikandan

2

In elasticsearch path home dir /usr/share/elasticsearchgibt es normalerweise eine Konfigurationsdatei bin/elasticsearch.in.sh. Parameter ändern ES_MIN_MEM, ES_MAX_MEMin dieser Datei zu ändern -Xms2g, -Xmx4gsind. Und Bitte stellen Sie sicher, dass Sie den Knoten nach dieser Konfigurationsänderung neu gestartet haben.



1

In elasticsearch 2.x:

vi /etc/sysconfig/elasticsearch 

Gehen Sie zum Codeblock

# 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

Kommentar letzte Zeile wie

ES_HEAP_SIZE=2g
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.