CentOS 7.x运行ElasticSearch5.3.3出现memory is not locked 作者: sysit 分类: d 发表于 2018-10-26 516人围观 ### 1. 问题描述 ElasticSearch版本为5.3.3,安装在CentOS 7.3操作系统上,集群共计3个节点,运行一段时间后,出现了memory is not locked的报错: > ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked ### 2. 原因分析 ElasticSearch5.3.3 在CentOS 7.x以上版本中,默认配置```bootstrap.memory_lock: true```,但是系统又锁定内存失败。 ### 3. 解决办法 (1)gz或者tar.gz包安装的ElasticSearch ``` sudo vim /etc/security/limits.conf #添加如下两行 * soft memlock unlimited * hard memlock unlimited ``` (2)RPM包或者DEB包安装 在系统配置文件设置`MAX_LOCKED_MEMORY`为`unlimited`,或者使用系统 `systemd`。 ``` #rpm vi /etc/sysconfig/elasticsearch MAX_LOCKED_MEMORY=unlimited #deb vi /etc/default/elasticsearch MAX_LOCKED_MEMORY=unlimited ``` (3)系统使用systemd 使用`systemd`管理的系统,在`systemd`配置文件中配置`LimitMEMLOCK` ``` # 加载成默认 vi /usr/lib/systemd/system/elasticsearch.service [Service] LimitMEMLOCK=infinity # 覆盖加载(和默认二选一),也可以sudo systemctl edit elasticsearch编辑 vi /etc/systemd/system/elasticsearch.service.d/override.conf [Service] LimitMEMLOCK=infinity # 加载 sudo systemctl daemon-reload ``` ### 4. 关于ElasticSearch内存锁定 ElasticSearch集群中的数据量总是很大的,为了加快索引的速度,我们希望将尽可能多的数据加载到内存中。 设置```bootstrap.memory_lock: true```,在程序启动的时候先去获取足够大的内存,其目的是为了锁住内存。防止在内存不足的情况下,将ES的内存数据交换到磁盘上。因为当JVM开始swapping的时候,ES的效率会降低,所以要保证它不swap,并且保证机器有足够的内存分配给ES。 ### 5. 关于ElasticSearch最大内存设置 ElasticSearch官方建议内存设置不能大于32G,内存大于32G,指针会切换回普通对象指针。每个指针的大小增加,使用更多的CPU内存带宽。  如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作! 赞赏支持