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?
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
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
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)
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
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!
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.
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 :)
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
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.
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
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