Comment changer la taille de mémoire max d’Elasticsearch

J’ai un serveur Apache avec une configuration par défaut d’Elasticsearch et tout fonctionne parfaitement, sauf que la configuration par défaut a une taille maximale de 1 Go.

Je n’ai pas un grand nombre de documents à stocker dans Elasticsearch, je veux donc réduire la mémoire.

J’ai vu que je devais changer le paramètre -Xmx dans la configuration Java, mais je ne sais pas comment.

J’ai vu que je peux exécuter ceci:

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

Mais quand je dois redémarrer Elasticsearch, cela sera perdu.

Est-il possible de modifier l’utilisation maximale de la mémoire lorsque Elasticsearch est installé en tant que service?

Mis à jour le 24 novembre 2016 : Elasticsearch 5 a apparemment changé la façon de configurer la JVM. Voir cette réponse ici . La réponse ci-dessous s’applique toujours aux versions <5.

tirdadc, merci de le signaler dans votre commentaire ci-dessous.


J’ai une page pastebin que je partage avec d’autres lorsque je m’interroge sur la mémoire et ES. Cela a fonctionné correctement pour moi: http://pastebin.com/mNUGQCLY . Je vais coller le contenu ici aussi:

Les références:

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

Modifiez les fichiers suivants pour modifier la limite de mémoire et de fichier. Ces instructions supposent Ubuntu 10.04, peuvent fonctionner sur les versions ultérieures et autres dissortingbutions / systèmes d’exploitation. ( Edit : Cela fonctionne aussi pour Ubuntu 14.04.)

/etc/security/limits.conf :

 elasticsearch - nofile 65535 elasticsearch - memlock unlimited 

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

 ES_HEAP_SIZE=512m MAX_OPEN_FILES=65535 MAX_LOCKED_MEMORY=unlimited 

/etc/elasticsearch/elasticsearch.yml :

 bootstrap.mlockall: true 

Dans ElasticSearch> = 5, la documentation a changé , ce qui signifie qu’aucune des réponses ci-dessus n’a fonctionné pour moi.

J’ai essayé de changer ES_HEAP_SIZE dans /etc/default/elasticsearch et dans etc/init.d/elasticsearch , mais quand j’ai lancé ps aux | grep elasticsearch ps aux | grep elasticsearch la sortie a encore montré:

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

J’ai dû faire ces changements dans:

/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 

Pour quiconque souhaite faire cela sur Centos 7 ou sur un autre système exécutant SystemD, vous le changez en

 /etc/sysconfig/elasticsearch 

Décommentez la ligne ES_HEAP_SIZE et définissez une valeur, par exemple:

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

(Ignorer le commentaire d’environ 1g max – c’est la valeur par défaut)

Les réponses précédentes étaient insuffisantes dans mon cas, probablement parce que je suis sur Debian 8, alors qu’elles étaient référées à une dissortingbution antérieure.

Sur Debian 8, modifiez le script de service normalement placé dans /usr/lib/systemd/system/elasticsearch.service , et ajoutez Environment=ES_HEAP_SIZE=8G juste en dessous des autres lignes “Environment = *”.

Rechargez maintenant le script de service avec systemctl daemon-reload et redémarrez le service. Le travail devrait être fait!

Instructions pour ubuntu 14.04 :

sudo vim /etc/init.d/elasticsearch

Ensemble

ES_HEAP_SIZE=512m

puis dans:

sudo vim /etc/elasticsearch/elasticsearch.yml

Ensemble:

bootstrap.memory_lock: true

Il y a des commentaires dans les fichiers pour plus d’informations

Si vous utilisez l’encapsuleur de service fourni dans le référentiel Github d’Elasticsearch, disponible à l’ adresse https://github.com/elasticsearch/elasticsearch-servicewrapper , le fichier conf d’elasticsearch-servicewrapper / service / elasticsearch.conf contrôle les parameters de la mémoire. En haut de elasticsearch.conf se trouve un paramètre:

 set.default.ES_HEAP_SIZE=1024 

Réduisez simplement ce paramètre, par exemple “set.default.ES_HEAP_SIZE = 512”, pour réduire la mémoire allouée d’Elasticsearch.

Notez que si vous utilisez le wrapper elasticsearch, le fichier ES_HEAP_SIZE fourni dans elasticsearch.conf OVERRIDES TOUS LES AUTRES PARAMÈTRES. Cela m’a pris un peu de temps pour comprendre, car à partir de la documentation, il semblait que la mémoire de tas pouvait être définie à partir d’elasticsearch.yml.

Si les parameters de votre wrapper de service sont définis ailleurs, par exemple dans / etc / default / elasticsearch, comme dans l’exemple de James, définissez-y ES_HEAP_SIZE.

Si vous avez installé ES à l’aide des packages RPM / DEB fournis (comme vous semblez l’avoir), vous pouvez ajuster cela en éditant le script init ( /etc/init.d/elasticsearch on RHEL/CentOS ). Si vous regardez dans le fichier, vous verrez un bloc avec les éléments suivants:

 export ES_HEAP_SIZE export ES_HEAP_NEWSIZE export ES_DIRECT_SIZE export ES_JAVA_OPTS export JAVA_HOME 

Pour ajuster la taille, changez simplement la ligne ES_HEAP_SIZE comme suit:

 export ES_HEAP_SIZE=xM/xG 

(où x est le nombre de Mo / Go de RAM que vous souhaitez allouer)

Exemple:

 export ES_HEAP_SIZE=1G 

Serait allouer 1 Go.

Une fois le script modifié, enregistrez et quittez, puis redémarrez le service. Vous pouvez vérifier s’il a été correctement défini en exécutant les opérations suivantes:

 ps aux | grep elasticsearch 

Et rechercher les indicateurs -Xms et -Xmx dans le processus Java qui renvoie:

 /usr/bin/java -Xms1G -Xmx1G 

J’espère que cela t’aides 🙂

Si vous utilisez Windows Server, vous pouvez modifier la variable d’environnement, redémarrer le serveur pour appliquer la nouvelle valeur d’environnement et démarrer Elastic Service. Plus d’informations dans Installer Elastic dans Windows Server

Dans le répertoire principal de chemin d’access elasticsearch, à savoir généralement /usr/share/elasticsearch , il existe un fichier de configuration bin/elasticsearch.in.sh . Modifiez le paramètre ES_MIN_MEM , ES_MAX_MEM dans ce fichier pour modifier respectivement -Xms2g , -Xmx4g . Et s’il vous plaît assurez-vous que vous avez redémarré le nœud après cette modification de configuration.

Dans elasticsearch 2.x:

 vi /etc/sysconfig/elasticsearch 

Aller au bloc de code

 # 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 

Décommentez la dernière ligne comme

 ES_HEAP_SIZE=2g