Elasticsearch: максимальное количество областей виртуальной памяти 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.


person casibbald    schedule 20.07.2018    source источник


Ответы (9)


Ответ Вивека

sysctl -w vm.max_map_count=262144

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

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

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

person Val    schedule 20.07.2018
comment
Не забываем перезагрузиться или: sysctl --system - person hybaken; 25.09.2018
comment
Большое спасибо. Это так хорошо помогло. - person Promise Preston; 27.03.2020
comment
обратите внимание, что если вы перезагрузите компьютер, эта конфигурация исчезнет, ​​поэтому этот метод не является постоянным. - person ASLIM; 05.05.2021

Вставьте новую запись в файл /etc/sysctl.conf с обязательным параметром:

vm.max_map_count = 262144

он делает изменения постоянными.

Также запустите:

sysctl -w vm.max_map_count=262144

изменить текущее состояние ядра.

Если вы используете докер для вступления в силу, вам следует перезапустить его:

systemctl restart docker
person burtsevyg    schedule 10.12.2019
comment
если вы не являетесь пользователем root, убедитесь, что у вас есть права на sudo, и используйте sudo перед выполнением выше. - person xiaojueguan; 08.01.2021
comment
если вы используете docker-compose для запуска контейнеров на хосте, вы также можете запустить эту команду sysctl -w vm.max_map_count=262144 с правами root, чтобы решить эту проблему. - person xiaojueguan; 23.02.2021
comment
@burtsevyg исправьте команду, пожалуйста: systemctl вместо clt. - person rios0rios0; 10.03.2021
comment
@ rios0rios0 человек говорит: sysctl - настройка параметров ядра во время выполнения, systemctl - управление системой systemd и диспетчером служб - person burtsevyg; 10.03.2021
comment
@burtsevyg обратите внимание, прежде чем отвечать ... В команде есть опечатка. - person rios0rios0; 11.03.2021
comment
@ rios0rios0 да, ты прав. Спасибо. - person burtsevyg; 11.03.2021
comment
Используйте sysctl vm.max_map_count=262144 (i без -w), и таким образом изменение будет доступно только до завершения работы ОС. Это машина для разработчиков. Итак, я не хотел постоянно меняться. - person dexter2305; 22.06.2021


для пользователей Windows, использующих подсистему wsl

открытый запуск PowerShell

wsl -d docker-desktop

тогда

sysctl -w vm.max_map_count=262144
person Hamza AZIZ    schedule 09.03.2021

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

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

sudo sysctl -w vm.max_map_count=262144

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

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

person yonga springfield    schedule 06.07.2019

Выполните следующую команду: sysctl -w vm.max_map_count=262144, чтобы увеличить виртуальную память по умолчанию, используемую Elasticsearch.

Примечание. Когда вы запустите вышеупомянутую команду, ваша проблема будет решена, но это будет временное решение, поскольку узел / система / контейнер будут перезапущены, и ваши изменения будут внесены. Поэтому, если вы хотите установить это постоянно, вам нужно отредактировать /etc/sysctl.conf и установить vm.max_map_count на 262144.

Для получения дополнительных сведений нажмите здесь. .

person Keshav Lodhi    schedule 30.11.2019

Вы также можете решить проблему ограничения памяти, используя тип обнаружения single-node. Установите это в среде: discovery.type=single-node

docker-compose.yml

services:
  es:
    image: elasticsearch
    environment:
      - discovery.type=single-node

Смотрите также:

person thisismydesign    schedule 05.07.2021

Максимальное количество областей виртуальной памяти vm.max_map_count [65530] слишком мало, увеличьте его как минимум до [262144].
Выполните команду ниже, чтобы исправить эту проблему:

sysctl -w vm.max_map_count=262144
person deepu kumar singh    schedule 21.09.2020

Я столкнулся с той же проблемой для одноузлового эластичного поискового кластера. Согласно документации по эластичному поиску для запуска одиночный узел, вы должны использовать discovery.type = single-node в команде запуска docker.

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.13.3

В docker-compose.yml вы можете указать ниже:

version: '3.1'
services:
 elastic_search:
  image: docker.elastic.co/elasticsearch/elasticsearch:7.13.3
  container_name: es01
  environment:
   - "discovery.type=single-node"
   - node.name=es01
   - bootstrap.memory_lock=true
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  ports:
   - 9200:9200
  networks:
   - elastic
networks:
 elastic:
person Alisha Raju    schedule 16.07.2021