web-dev-qa-db-fra.com

La zone de mémoire virtuelle max de recherche élastique vm.max_map_count [65530] est trop basse, augmentez-la au moins [262144]

J'ai un problème avec une configuration systemd pour ElasticSearch.

[Unit]
Description=platform-elasticsearch
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
User={{ app_user }}
Group={{ app_group }}
Environment=ES_PATH_CONF=/platform/opt/elasticsearch-{{ elasticsearch.version }}/config
Environment=Java_HOME=/platform/opt/jdk{{ jdk.major_version }}_{{ jdk.minor_version }}
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=100000
LimitMEMLOCK=100000
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/platform/var/app/elasticsearch
ExecStart=/platform/opt/elasticsearch-{{ elasticsearch.version }}/bin/elasticsearch
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s -TERM $MAINPID
TimeoutStopSec=60
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143 0
Type=simple
Restart=on-failure
RestartSec=10
PIDFile=/platform/var/run/elasticsearch.pid

[Install]
WantedBy=multi-user.target

Cela ne semble pas me permettre de configurer le paramètre vm.max_map_count.

Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,359][INFO ][o.e.b.BootstrapChecks    ] [1oQJNUK] bound or publishing to a non-loopback     address, enforcing bootstrap checks
Jul 20 14:53:46 scratchpad elasticsearch: ERROR: [1] bootstrap checks failed
Jul 20 14:53:46 scratchpad elasticsearch: [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,376][INFO ][o.e.n.Node               ] [1oQJNUK] stopping ...
Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,414][INFO ][o.e.n.Node               ] [1oQJNUK] stopped
Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,414][INFO ][o.e.n.Node               ] [1oQJNUK] closing ...
Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,445][INFO ][o.e.n.Node               ] [1oQJNUK] closed
Jul 20 14:53:46 scratchpad systemd: platform-elasticsearch.service: main process exited, code=exited, status=78/n/a

Le problème spécifique est le suivant:

Jul 20 14:53:46 scratchpad elasticsearch: [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

J'ai pu lancer une recherche élastique sur la ligne de commande avec les éléments suivants:

Sudo su -c 'echo 262144 > "/proc/sys/vm/max_map_count"' && \ 
export Java_HOME=/platform/opt/jdk1.8.0_181 && \
export ES_PATH_CONF=/platform/opt/elasticsearch-6.3.1/config && \
/platform/opt/elasticsearch-6.3.1/bin/elasticsearch 

quelqu'un peut-il me dire pourquoi LimitMEMLOCK = 100000 ne fonctionne pas et comment je peux effectivement définir max_map_count à partir de systemd.

J'ai également essayé de définir les paramètres suivants:

cat /etc/security/limits.d/30_elastic_limits.conf

vagrant       hard    nofile     500000
vagrant       hard    memlock     262144

mais cela semble être totalement ignoré par systemd.

23
casibbald

réponse de Vivek

sysctl -w vm.max_map_count=262144

est correct, cependant, le réglage ne durera que pour la durée de la session. Si l'hôte redémarre, le paramètre revient à sa valeur d'origine.

Si vous souhaitez définir cette option de manière permanente, vous devez modifier /etc/sysctl.conf et définir vm.max_map_count sur 262144.

Lorsque l'hôte redémarre, vous pouvez vérifier que le paramètre est toujours correct en exécutant sysctl vm.max_map_count

34
Val

Voir le documentation Elasticsearch sur la mémoire virtuelle . Sur Centos, vous pouvez faire avec la commande suivante:

sysctl -w vm.max_map_count=262144
16
Vivek Pakmode

Ce n'est pas une réponse en soi, mais un éclaircissement/raccourci pour toute personne ayant le problème de l'op du point de vue du conteneur docker. J'ai eu ce problème d'une application s'exécutant dans un conteneur Docker. Et comme expliqué ici par nishant

Vous n'avez pas besoin d'augmenter la mémoire virtuelle pour Elasticsearch au niveau du conteneur, vous pouvez le faire pour la machine hôte en exécutant cette commande:

Sudo sysctl -w vm.max_map_count=262144

puis redémarrez vos docker-conteneurs.

Comme expliqué par val ci-dessus, le paramètre max_map_count de cette manière ne persistera pas lors du redémarrage de la machine sur laquelle le conteneur de menu fixe est exécuté. et vous devrez donc le sauvegarder de manière plus persistante, comme il l’a expliqué ci-dessus.

6
yonga springfield