介绍
介绍
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
测试
测试容器
福哥执行了curl命令打印了ES的信息。
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的性能了。