同福

Docker部署Elasticsearch开启内存锁定bootstrap.memory_lock【20220824】

介绍

介绍

Elasticsearch的性能严重依赖CPU和内存,默认情况下ES的内存的动态管理的,也就是说我们查询ES的时候会将查询结构缓存到内存里面,如果空闲内存不足则不能使用缓存提速。

ES设置了一个选项,可以在启动ES的时候将一定量的内存锁定起来,这部分内存只为ES服务,ES想随时可以利用这部分内存提升查询效率。

今天福哥就带着大家学习如何开启ES的内存锁定功能。

配置

开启内测锁定

设置docker环境变量开启ES内存锁定。

-e bootstrap.memory_lock=true

设置JVM内存限制

设置docker环境变量设置JVM内存限制。

-e "ES_JAVA_OPTS=-Xms4g -Xmx4g"

设置ulimit

设置docker的ulimit参数,设置memlock不限制大小。

--ulimit memlock=-1:-1

启动

启动容器

福哥使用docker run启动了一个es容器。

docker run -tid --name es \
-h es \
-e bootstrap.memory_lock=true \
-e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \
--ulimit memlock=-1:-1 \
registry.tongfu.net:5000/elasticsearch:6.8.15

home/topic/2022/0824/11/46ccf02c0d215b94684293f0f9d811c3.png

测试

测试容器

福哥执行了curl命令打印了ES的信息。

home/topic/2022/0824/11/2a765499295066e576ff5af2d06416d4.png

docker-compose

docker-compose

福哥用的是docker-compose部署的ES环境,这里给出一个docker-compose的配置例子。

elasticsearch:
  image: registry.tongfu.net:5000/elasticsearch:6.8.15
  container_name: elasticsearch
  hostname: elasticsearch
  ports:
    - 9200:9200
  environment:
    - bootstrap.memory_lock=true
    - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
  ulimits:
    memlock:
      soft: -1
      hard: -1
  deploy:
    resources:
      limits:
        cpus: '1'
        memory: 5G

总结

福哥带着大家学会了给ES开启内存锁定的方法,在内存充足的情况下,可以极大地提高ES的性能了。