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.