2014-11-25 6 views
8

In Versuch JVM-Heap-Größe für Elasticsearch auf einer Windows-Box zu erhöhen, habe ich die folgende Umgebungsvariable definiert:Elasticsearch meldet Standardheap Speichergröße nach Umgebung Einstellgröße

ES_HEAP_SIZE = 6g

(Die Maschine 12G hat RAM insgesamt).

Ich habe ES neugestartet und die Speichernutzung mit dem Befehl _nodes/stat HTTP GET abgefragt. Allerdings scheint es, dass es immer noch 1 GB ist mit:

mem: {

heap_used_in_bytes: 1032367576, 
heap_used_percent: 99, 
heap_committed_in_bytes: 1037959168, 
heap_max_in_bytes: 1037959168, 
... 

Sollte nicht ES seine Heap-Speicher Größe nach dem Neustart einstellen?

Antwort

6

Nachdem ich den Elasticsearch Windows-Dienst deinstalliert und neu installiert hatte, wurde die Größe des JVM-Heapspeichers korrekt erhöht. Es einfach neu zu starten, ohne den Dienst erneut zu installieren, hat nicht funktioniert.

+0

Das hat funktioniert! Ich verwende Windows Server 2012 und ich hatte das gleiche Problem (obwohl ich die Umgebungsvariablen ES_MIN_MEM und ES_MAX_MEM verwendet habe - dann habe ich ES_HEAP_SIZE für gute Maßnahme hinzugefügt). Ich habe versucht, neu zu starten (in einem neuen Administrator Powershell-Fenster, um die env-Änderungen aufzunehmen), ohne Erfolg. Mit {ES_HOME} \ bin \ service.bat stop/remove/install/start (als Administrator) wurde die Speicherzuweisung erfolgreich geändert. Es muss die Umgebungsvariablen während der Installation und nicht zur Laufzeit übernehmen. Danke, dass du deine eigene Antwort geschrieben hast! –

+0

Vielen Dank. Ich habe so viele andere Dinge ausprobiert und das hat funktioniert! –

0

Für Elastic Search 1.5

Eine Möglichkeit, es zu tun ist, um die /bin/elasticsearch.in.sh Datei zu bearbeiten, um einen anderen Wert auf Standard, die 1g. In Ihrem Beispiel ändern Sie die ES_MAX_MEM=1g für ES_MAX_MEM=6g. Nach der Bearbeitung starten Sie Elastic Search neu und Sie sollten gut sein.

#!/bin/sh 

ES_CLASSPATH=$ES_CLASSPATH:$ES_HOME/lib/elasticsearch-1.5.0.jar:$ES_HOME/lib/*:$ES_HOME/lib/sigar/* 

if [ "x$ES_MIN_MEM" = "x" ]; then 
    ES_MIN_MEM=256m 
fi 
if [ "x$ES_MAX_MEM" = "x" ]; then 
    ES_MAX_MEM=6g 
fi 
if [ "x$ES_HEAP_SIZE" != "x" ]; then 
    ES_MIN_MEM=$ES_HEAP_SIZE 
    ES_MAX_MEM=$ES_HEAP_SIZE 
fi 
+0

@jasonrhasses Ich habe in /bin/elasticsearch.in.sh geändert, aber es ist nicht in elastischen, effeting noch ist es mit 1g nur – RamRajVasavi

+0

@RamRajVasavi hast du über yum oder apt-get installieren? Es könnte ein anderes Startskript verwenden. Auch - verwenden Sie Version 1.5? – jasonrhaas

10

Aus den Aufzeichnungen auf running ES as a service on windows:

Hinweis, dass die Umgebungskonfigurationsoptionen während der Installation kopiert werden und wird während des Service-Lebenszyklus verwendet werden. Dies bedeutet, dass alle Änderungen, die nach der Installation an ihnen vorgenommen werden, nicht übernommen werden, wenn der Dienst nicht erneut installiert wird.

Wenn Sie nicht deinstallieren und neu installieren möchten, können Sie den Service Manager verwenden, um die Änderung vorzunehmen. >service manager laufen

wählen Sie dann die 'Java' Tab

Java Tab

Ändern, um die Speicher-Pool-Einstellungen, drücken Sie auf 'Übernehmen' und starten Sie den Dienst.

enter image description here

+0

Überschreibt dies alle zuvor konfigurierten Umgebungsvariablen? – bradvido

+1

Ja, die ursprünglich konfigurierten Umgebungsvariablen werden verwendet, um den Dienst anfangs zu konfigurieren. Wenn Sie hier Änderungen vornehmen, werden alle Umgebungsvariablen überschrieben. – Akshay

0

Um zu vermeiden, Service neu installieren Sie direkt Werte in der Registry ändern. Sie sind ein bisschen schwierig zu finden:

enter image description here

Natürlich müssen Sie den Dienst neu zu starten, nachdem Sie diese Einstellungen ändern.