我对ElasticSearch的systemd配置有问题。
[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不起作用,以及如何从systemd中有效设置max_map_count。
我还尝试设置以下内容:
cat /etc/security/limits.d/30_elastic_limits.conf
vagrant hard nofile 500000
vagrant hard memlock 262144
但这似乎被systemd完全忽略了。
答案 0 :(得分:19)
对于 windows 用户,使用 wsl 子系统
打开powershell 运行
wsl -d docker-desktop
然后
sysctl -w vm.max_map_count=262144
答案 1 :(得分:16)
sysctl -w vm.max_map_count=262144
是正确的,但是该设置将仅在会话期间持续。如果主机重新启动,则该设置将重置为原始值。
如果要永久设置此设置,则需要编辑/etc/sysctl.conf
并将vm.max_map_count
设置为262144。
主机重启后,您可以通过运行sysctl vm.max_map_count
答案 2 :(得分:12)
请参见Elasticsearch documentation about virtual memory。在Centos上,您可以使用以下命令:
sysctl -w vm.max_map_count=262144
答案 3 :(得分:3)
您还可以使用 single-node
发现类型解决内存限制问题。在环境中设置:discovery.type=single-node
docker-compose.yml
services:
es:
image: elasticsearch
environment:
- discovery.type=single-node
另见:
答案 4 :(得分:2)
这本身不是答案,而是从docker容器的角度对有操作问题的任何人的澄清/捷径。 我在Docker容器中运行的应用程序遇到了这个问题。 正如here by nishant
所述您不需要在容器级别增加用于Elasticsearch的虚拟内存,您可以通过运行以下命令为主机添加虚拟内存:
sudo sysctl -w vm.max_map_count=262144
然后重新启动您的docker-containers。
正如上面val所解释的,以这种方式设置此max_map_count
不会在运行Docker容器的机器重启后持续存在。因此您需要按照上面他的解释以更持久的方式保存它。
答案 5 :(得分:1)
请运行以下命令:sysctl -w vm.max_map_count=262144
以增加Elasticsearch使用的默认虚拟内存。
注意::当您运行上述命令时,您的问题将得到解决,但这将是一个临时解决方案,因为节点/系统/容器将重新启动,您的更改将继续进行。因此,如果要永久设置此设置,则需要编辑/etc/sysctl.conf
并将vm.max_map_count
设置为262144
。
有关更多详细信息,请单击here。
答案 6 :(得分:1)
使用所需参数将新条目插入/etc/sysctl.conf文件中:
vm.max_map_count = 262144
它使更改永久生效。
也可以运行:
sysctl -w vm.max_map_count=262144
更改内核的当前状态。
答案 7 :(得分:1)
最大虚拟内存区域vm.max_map_count [65530]太低,增加到至少[262144]。
请运行以下命令来解决此问题:
sysctl -w vm.max_map_count=262144
答案 8 :(得分:0)
对于单节点弹性搜索集群,我遇到了同样的问题。根据{{3}},要运行单个节点,您必须在 docker run 命令中使用 "discovery.type=single-node"。
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: