Эластичный поиск максимальных областей виртуальной памяти vm.max_map_count [65530] слишком низок, увеличивается, по крайней мере, до [262144] - программирование
Подтвердить что ты не робот

Эластичный поиск максимальных областей виртуальной памяти vm.max_map_count [65530] слишком низок, увеличивается, по крайней мере, до [262144]

У меня проблема с конфигурацией systemd для 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

Кажется, это не позволяет мне настроить параметр 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

Конкретная проблема заключается в следующем:

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]

Мне удалось начать упругий поиск в командной строке со следующим:

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 

Может кто-нибудь сказать мне, почему LimitMEMLOCK = 100000 не работает, и как я могу эффективно установить max_map_count изнутри systemd.

Я также попытался установить следующее:

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

vagrant       hard    nofile     500000
vagrant       hard    memlock     262144

но это, кажется, полностью игнорируется systemd.

4b9b3361

Ответ 1

Вивек ответ

sysctl -w vm.max_map_count=262144

верно, однако, настройка будет длиться только в течение сеанса. Если хост перезагрузится, настройка будет сброшена к исходному значению.

Если вы хотите установить это навсегда, вам нужно отредактировать /etc/sysctl.conf и установить vm.max_map_count 262144.

Когда хост перезагрузится, вы можете проверить правильность настройки, запустив sysctl vm.max_map_count

Ответ 4

Это не сам по себе ответ, а пояснение/ярлык для любого, у кого есть проблема с операцией с точки зрения контейнера докера. У меня была эта проблема из приложения, запущенного в док-контейнере. И как объяснил здесь Nishant

Вам не нужно увеличивать виртуальную память для Elasticsearch на уровне контейнера, вы можете сделать это для хост-машины, выполнив следующую команду:

sudo sysctl -w vm.max_map_count=262144

а затем перезапустите ваши докер-контейнеры.

Как поясняется в val выше, установка этого max_map_count таким образом не будет сохраняться при перезапуске машины, на которой выполняется док-контейнер. и поэтому вам нужно будет сохранить его более настойчивым образом, как он объяснил выше.