Come modificare la dimensione massima della memoria di Elasticsearch


99

Ho un server Apache con una configurazione predefinita di Elasticsearch e tutto funziona perfettamente, tranne che la configurazione predefinita ha una dimensione massima di 1 GB.

Non ho un numero così elevato di documenti da archiviare in Elasticsearch, quindi voglio ridurre la memoria.

Ho visto che devo cambiare il file -Xmx parametro nella configurazione di Java, ma non so come.

Ho visto che posso eseguire questo:

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

Ma quando dovrò riavviare Elasticsearch questo andrà perso.

È possibile modificare l'utilizzo massimo della memoria quando Elasticsearch è installato come servizio?


Quale sistema operativo e versione? Versione Elasticsearch? Come hai installato Elasticsearch?
James Addison

1
Potresti voler ridurre il numero di repliche e frammenti poiché non c'è vantaggio di averli su una configurazione a 1 nodo, aggiungilo a /etc/elasticsearch/elasticsearch.yaml: in index.number_of_shards: 1 index.number_of_replicas: 0 questo modo risparmi sulla memoria e sulla cpu non facendo un lavoro inutile .
neo112

Risposte:


127

In ElasticSearch> = 5 la documentazione è cambiata , il che significa che nessuna delle risposte precedenti ha funzionato per me.

Ho provato a cambiare ES_HEAP_SIZEdentro /etc/default/elasticsearche dentro etc/init.d/elasticsearch, ma quando ho eseguito ps aux | grep elasticsearchl'output mostrava ancora:

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

Ho dovuto apportare queste modifiche 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
E per Elasticsearch 5.2 su Mac OS 10.12 ho trovato questo file in/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
Posso confermare che funziona per l'istanza aws ami (installata con RPM), ma prima imposta MAX_LOCKED_MEMORY = illimitato in / etc / sysconfig / elasticsearch e bootstrap.memory_lock: true in /etc/elasticsearch/elasticsearch.yml
mork

2
Questo non funziona in Windows - la risposta corretta è qui: stackoverflow.com/questions/28798845/...
CBP

4
Per le installazioni homebrew, il file si trova qui:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

117

Aggiornato il 24 novembre 2016 : Elasticsearch 5 apparentemente ha cambiato il modo di configurare la JVM. Vedi questa risposta qui . La risposta di seguito si applica ancora alle versioni <5.

tirdadc, grazie per averlo sottolineato nel tuo commento qui sotto.


Ho una pagina pastebin che condivido con altri quando mi chiedo della memoria e dell'ES. Ha funzionato bene per me: http://pastebin.com/mNUGQCLY . Incollerò anche i contenuti qui:

Riferimenti:

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

Modificare i seguenti file per modificare i limiti di memoria e numero di file. Queste istruzioni presumono che Ubuntu 10.04 possa funzionare su versioni successive e altre distribuzioni / sistemi operativi. ( Modifica : funziona anche per Ubuntu 14.04.)

/etc/security/limits.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/ etc / default / elasticsearch (su 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
Questo sembra buono. Ho anche il seguente consiglio su come determinare cosa dovrebbe essere ES_HEAP_SIZE: La regola pratica è che l'heap ElasticSearch dovrebbe avere circa il 50% della memoria disponibile sulla macchina. ElasticSearch utilizza molto le cache di sistema, quindi dovresti lasciare abbastanza memoria per loro. (da asquera.de/opensource/2012/11/25/… )
Tom

17
In CentOS, vedo le configurazioni che hai menzionato /etc/defaultsotto `/ etc / sysconfig '
Nishant

5
Su CentOS /etc/sysconfig/elasticsearchè il luogo appropriato per apportare queste modifiche. L'RPM fornisce anche una versione predefinita di questo file.
slm

5
Questo non è più applicabile per Elasticsearch 5, hai bisogno di questa risposta .
tirdadc

2
Sembra buono, ma ho messo i miei limiti specificamente per l'utente /etc/security/limits.d/elasticsearch.conf
elasticsearch

26

Per chiunque cerchi di farlo su Centos 7 o con un altro sistema che esegue SystemD, lo si modifica in

/etc/sysconfig/elasticsearch 

Rimuovere il commento dalla riga ES_HEAP_SIZE e impostare un valore, ad esempio:

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

(Ignora il commento su 1g max: è l'impostazione predefinita)


Dovrei aggiungere: ho provato l'approccio sopra su ES 1.7 su CentOS 7 e non ha avuto alcun effetto
Jonesome Reinstate Monica

1
@Jonesome non è sicuro di quello che posso suggerire - Sto eseguendo ES 1.7.1 dal pacchetto ES RPM su CentOS 7 e questo è il percorso in cui esiste questo file e la modifica di ES_HEAP_SIZE funziona come previsto.

9

Istruzioni per ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

Impostato

ES_HEAP_SIZE=512m

poi in:

sudo vim /etc/elasticsearch/elasticsearch.yml

Impostato:

bootstrap.memory_lock: true

Ci sono commenti nei file per maggiori informazioni


9

Le risposte precedenti nel mio caso erano insufficienti, probabilmente perché sono su Debian 8, mentre erano riferite a qualche distribuzione precedente.

In Debian 8 modificare lo script di servizio normalmente inserito /usr/lib/systemd/system/elasticsearch.servicee aggiungerlo Environment=ES_HEAP_SIZE=8G appena sotto le altre righe "Environment = *".

Ora ricarica lo script del servizio con systemctl daemon-reloade riavvia il servizio. Il lavoro dovrebbe essere fatto!


1
grazie, mi salvi la giornata! sì, questa è la procedura corretta per Debian 8
veloce2b

Non c'è altro posto per configurarlo se non per modificare un file /usr/?
Martin Schröder

6

Se utilizzi il wrapper del servizio fornito nel repository Github di Elasticsearch, disponibile su https://github.com/elasticsearch/elasticsearch-servicewrapper , il file conf in elasticsearch-servicewrapper / service / elasticsearch.conf controlla le impostazioni della memoria. Nella parte superiore di elasticsearch.conf c'è un parametro:

set.default.ES_HEAP_SIZE=1024

Riduci questo parametro, ad esempio "set.default.ES_HEAP_SIZE = 512", per ridurre la memoria assegnata a Elasticsearch.

Nota che se usi il wrapper elasticsearch, ES_HEAP_SIZE fornito in elasticsearch.conf SOVRASCRIVE TUTTE LE ALTRE IMPOSTAZIONI. Mi ci è voluto un po 'per capirlo, poiché dalla documentazione, sembrava che la memoria heap potesse essere impostata da elasticsearch.yml.

Se le impostazioni del wrapper del servizio sono impostate altrove, come in / etc / default / elasticsearch come nell'esempio di James, imposta ES_HEAP_SIZE lì.


2
cosa succede se non hai alcun servizio? (es. basta eseguire bin / elasticsearch -d)
Henley Chiu


@HenleyChiu quindi imposta la variabile d'ambiente ES_HEAP_SIZE prima di eseguirla. ieexport ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

Nell'ES 1.7.x stock elasticsearch.conf (quello installato da rpm su CentOS), non c'è affatto set.default. Questo approccio funziona su ES 1.7?
Jonesome Reinstalla Monica il

La risposta di cui sopra è fuorviante. Imposta ES_HEAP_SIZE in / etc / sysconfig /
elasticsearch

6

Se hai installato ES utilizzando i pacchetti RPM / DEB forniti (come sembra), puoi aggiustarlo modificando lo script init ( /etc/init.d/elasticsearch on RHEL/CentOS). Se dai un'occhiata al file vedrai un blocco con quanto segue:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

Per regolare le dimensioni, cambia semplicemente la ES_HEAP_SIZElinea come segue:

export ES_HEAP_SIZE=xM/xG

(dove x è il numero di MB / GB di RAM che desideri allocare)

Esempio:

export ES_HEAP_SIZE=1G

Assegnerebbe 1 GB.

Dopo aver modificato lo script, salva ed esci, quindi riavvia il servizio. È possibile verificare se è stato impostato correttamente eseguendo quanto segue:

ps aux | grep elasticsearch

E controllando i flag -Xms e -Xmx nel processo java che restituisce:

/usr/bin/java -Xms1G -Xmx1G

Spero che questo ti aiuti :)


1
Non farlo in questo modo. Questo non è un buon posto per apportare questi tipi di modifiche. Questo è un trucco gigante! Potrebbe funzionare, ma verrà potenzialmente eliminato ogni volta che ES viene aggiornato.
slm

1
Dovrei aggiungere: ho provato l'approccio sopra su ES 1.7 su CentOS 7 e non ha avuto alcun effetto.
Jonesome Reinstalla Monica

3
  • Elasticsearch assegnerà l'intero heap specificato in jvm.options tramite le impostazioni Xms (dimensione minima dell'heap) e Xmx (dimensione massima dell'heap).
    • -Xmx12g
    • -Xmx12g
  • Impostare la dimensione heap minima (Xms) e la dimensione heap massima (Xmx) in modo che siano uguali tra loro.
  • Non impostare Xmx sopra il limite che la JVM utilizza per i puntatori a oggetti compressi (oops compressi), il limite esatto varia ma è vicino a 32 GB.

  • È anche possibile impostare la dimensione dell'heap tramite una variabile di ambiente

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

Inoltre non più del 50% della RAM fisica
Achi Even-dar

Ciao Come ho impostato la variabile d'ambiente come questa. Il nome della variabile è ES_JAVA_OPTS e il valore: "-Xms2g -Xmx2g" ./bin/elasticsearch like
Manikandan

Anche come confermo, dimensione dell'heap correttamente aggiornata
Manikandan

2

Nella directory home del percorso di elasticsearch, ovvero tipicamente /usr/share/elasticsearch, è presente un file di configurazione bin/elasticsearch.in.sh. Modifica parametro ES_MIN_MEM, ES_MAX_MEMin questo file da modificare -Xms2g, -Xmx4grispettivamente. E assicurati di aver riavviato il nodo dopo questa modifica alla configurazione.



1

In elasticsearch 2.x:

vi /etc/sysconfig/elasticsearch 

Vai al blocco di codice

# 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

Rimuovi il commento dall'ultima riga come

ES_HEAP_SIZE=2g
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.