由于当jvm开始swapping时es的效率会降低,所以要保证它不swap,这对节点健康极其重要。实现这一目标的一种方法是将?bootstrap.memory_lock?设置为true。 要使此设置有效,首先需要配置其他系统设置。有关如何正确设置内存锁定的更多详细信息,请参阅启用bootstrap.memory_lock。
bootstrap.memory_lock: 是否锁住内存,避免交换(swapped)带来的性能损失,默认值是: false bootstrap.system_call_filter: 是否支持过滤掉系统调用。elasticsearch 5.2以后引入的功能,在bootstrap的时候check是否支持seccomp。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| 检查bootstrap.memory_lock设置是否生效:
get http://10.127.0.1:9200/_nodes?filter_path=**.mlockall
响应:
{
"nodes": {
"9giihmDNRdS136KT52Gl5g": {
"process": {
"mlockall": true
}
},
"X0zQESeeT8uJ9kVXvHpl-w": {
"process": {
"mlockall": true
}
},
"w4hYw86rQhqL1ayGyUK1Kw": {
"process": {
"mlockall": true
}
}
}
}
Copy |
如果看到mlockall为false,则表示mlockall请求失败。还将在日志中看到一行”Unable to lock JVM Memory”。
elasticsearch报错之 memory locking requested for elasticsearch process but memory is not locked:
安装elasticsearch报错如下:
1
2
3
| [2019-01-14T03:57:16,453][ERROR][o.e.b.Bootstrap ] [ip-172-31-30-62.ec2.internal] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
Copy |
网上查找资料,发现都不是适应自己的环境。最后在官网找到了方法:
不过先跟大家声明一点就是:环境不一样解决的方法也不一样,这里是Centos7.5版本的系统,所有的服务都由systemd来管理。elasticsearch是6.5.4版本,使用RPM包的方式安装的。
现在我们开始解决问题:
1、修改/etc/sysconfig/elasticsearch文件调整JVM内存大小
1
2
3
4
5
| #ES_JAVA_OPTS="-Xms16g -Xmx16g" (内存大小也可以在/etc/elasticsearch/jvm.options配置文件中定义,或者ES_HEAP_SIZE=16g)
JAVA_HOME=/usr/java/jdk1.8.0_51
ES_HEAP_SIZE=16g
MAX_OPEN_FILES=655350
MAX_LOCKED_MEMORY=unlimited
Copy |
替换16g为总内存的一半(Elasticsearch官方建议是主机总内存的一半)
2、修改/etc/security/limits.conf文件内容
1
2
| elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
Copy |
需要将elasticsearch替换为运行Elasticsearch程序的用户,使用root执行:service elasticsearch start实际上是以elasticsearch用户来执行
3、在/etc/systemd/system/elasticsearch.service.d目录下创建一个文件override.conf,并添加下列内容
1
2
3
| [Service]
LimitMEMLOCK=infinity
详情可以参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#systemd
Copy |
4、最后重新载入配置文件更新服务
systemctl daemon-reload
5、重启elasticsearch
service elasticsearch restart
|