it-swarm.com.de

Elastische Suche max virtuelle Speicherbereiche vm.max_map_count [65530] ist zu niedrig, erhöhen Sie auf mindestens [262144]

Ich habe ein Problem mit einer System-Konfiguration für 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

Dies scheint mich nicht in die Lage zu versetzen, die Einstellung vm.max_map_count zu konfigurieren.

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

Das spezifische Problem ist das Folgende:

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]

Ich konnte die elastische Suche in der Befehlszeile folgendermaßen starten:

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 

kann mir jemand sagen, warum LimitMEMLOCK = 100000 nicht funktioniert und wie ich max_map_count effektiv in systemd einstellen kann.

Ich habe auch versucht folgendes einzustellen:

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

vagrant       hard    nofile     500000
vagrant       hard    memlock     262144

aber dies scheint von systemd völlig ignoriert zu werden.

23
casibbald

Viveks Antwort

sysctl -w vm.max_map_count=262144

ist korrekt, die Einstellung ist jedoch nur für die Dauer der Sitzung gültig. Wenn der Host neu gestartet wird, wird die Einstellung auf den ursprünglichen Wert zurückgesetzt.

Wenn Sie dies dauerhaft festlegen möchten, müssen Sie /etc/sysctl.conf Bearbeiten und vm.max_map_count Auf 262144 setzen.

Wenn der Host neu gestartet wird, können Sie überprüfen, ob die Einstellung noch korrekt ist, indem Sie sysctl vm.max_map_count Ausführen.

34
Val

Siehe Elasticsearch-Dokumentation zum virtuellen Speicher . Auf Centos können Sie mit folgendem Befehl arbeiten:

sysctl -w vm.max_map_count=262144
16
Vivek Pakmode

Dies ist an sich keine Antwort, sondern eine Klärung/Abkürzung für jeden, der das Problem des Einsatzes aus der Perspektive eines Docker-Containers hat. Ich hatte dieses Problem von einer Anwendung, die in einem Docker-Container ausgeführt wurde. Und wie erklärt hier von nishant

Sie müssen den virtuellen Speicher für Elasticsearch nicht auf Containerebene vergrößern. Sie können dies für den Hostcomputer tun, indem Sie den folgenden Befehl ausführen:

Sudo sysctl -w vm.max_map_count=262144

und starten Sie dann Ihre Docker-Container neu.

Wie von val oben erklärt, setzen Sie dieses max_map_count Auf diese Weise wird der Neustart des Computers, auf dem der Docker-Container ausgeführt wird, nicht fortgesetzt. und so müssen Sie es auf eine beharrlichere Weise speichern, wie von ihm oben erklärt.

6