web-dev-qa-db-fra.com

Comment changer la taille maximale de la mémoire 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 nombre aussi important de documents à stocker dans Elasticsearch, je souhaite 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 lorsque je devrai redémarrer Elasticsearch, cela sera perdu.

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

92
Patxi1980

Dans ElasticSearch> = 5 , la documentation a modifiée , 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 lorsque j'ai exécuté ps aux | grep elasticsearch, le résultat affiché était toujours le suivant:

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

J'ai dû apporter ces modifications 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
120
BigRon

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

tirdadc, merci de l'avoir signalé dans votre commentaire ci-dessous.


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

Références:

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

Editez les fichiers suivants pour modifier les limites de mémoire et de nombre de fichiers. Ces instructions supposent qu'Ubuntu 10.04 peut fonctionner sur les versions ultérieures et d'autres distributions/systèmes d'exploitation. ( Edit : Cela fonctionne également 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
116
James Addison

Pour ceux qui souhaitent le faire sur Centos 7 ou avec un autre système exécutant SystemD, vous devez le modifier 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 sur 1g max - c'est la valeur par défaut)

25
user111013

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

9
surfer190

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 distribution antérieure.

Le Debian 8 modifie le script de service normalement dans /usr/lib/systemd/system/elasticsearch.service, et ajoute 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!

9
claudod

Si vous utilisez le service wrapper fourni dans le référentiel Github d'Elasticsearch, disponible à l'emplacement https://github.com/elasticsearch/elasticsearch-servicewrapper , puis le fichier de configuration situé dans les commandes elasticsearch-servicewrapper/service/elasticsearch.conf. paramètres de la mémoire. Au sommet de elasticsearch.conf se trouve un paramètre:

set.default.ES_HEAP_SIZE=1024

Réduisez simplement ce paramètre, dites "set.default.ES_HEAP_SIZE = 512", afin de réduire la mémoire allouée à Elasticsearch.

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

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

7
Scott Rice

Si vous avez installé ES en utilisant les packages RPM/DEB tels que fournis (comme vous semblez l’avoir), vous pouvez régler cela en modifiant 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, modifiez 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

Allouerait 1 Go.

Une fois que vous avez édité le script, enregistrez et quittez, puis redémarrez le service. Vous pouvez vérifier s'il a été correctement configuré en lançant:

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 :)

6
gl1tchh
  • Elasticsearch affectera l'intégralité du segment de mémoire spécifié dans jvm.options via les paramètres Xms (taille de segment minimale) et Xmx (taille de segment maximale).
    • -Xmx12g
    • -Xmx12g
  • Définissez la taille de segment minimale (Xms) et la taille de segment maximale (Xmx) égales.
  • Ne définissez pas Xmx au-dessus du seuil que la JVM utilise pour les pointeurs d’objets compressés (oops compressés), le seuil exact varie mais se situe autour de 32 Go.

  • Il est également possible de définir la taille du tas via une variable d'environnement

    • ES_Java_OPTS = "- Xms2g -Xmx2g" ./bin/elasticsearch
    • ES_Java_OPTS = "- Xms4000m -Xmx4000m" ./bin/elasticsearch
2
Satyendra Sharma

Dans le répertoire principal du chemin elasticsearch, c’est-à-dire typiquement /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 -Xms2g, -Xmx4g. Et s'il vous plaît assurez-vous que vous avez redémarré le nœud après cette modification de configuration.

2
Amit Sharma

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

Ne commentez pas la dernière ligne comme

ES_HEAP_SIZE=2g
1
Ankush

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 de détails dans Installer Elastic sous Windows Server

1
Thoai Ngo