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.