Overview
Elasticsearch performance can be heavily penalised if the node is allowed to swap memory to disk. Elasticsearch can be configured to automatically prevent memory swapping on its host machine by adding the bootstrap memory_lock true setting to elasticsearch.yml. If bootstrap checks are enabled, Elasticsearch will not start if memory swapping is not disabled. You can learn more about bootstrap checks here: Bootstraps Check in Elasticsearch – A Detailed Guide With Examples.
Note: It may be perfectly valid to have
bootstrap.memory_lock: false
In your configuration if you have taken alternative steps to stop memory swapping. See Other ways of Preventing Memory Swapping below.
How to resolve it
Edit elasticsearch.yml to include the following setting:
bootstrap.memory_lock: true
You can check whether the setting has worked by running:
GET _nodes?filter_path=**.mlockall
You should see true in the output.
{ "nodes" : { "ifU4SFrKTcCaR5Om0uFFbw" : { "process" : { "mlockall" : true } } } }
If on the other hand you see false, then further configuration is necessary.
RPM and Debian SystemD installations
sudo systemctl edit elasticsearch
Add the following:
[Service] LimitMEMLOCK=infinity
sudo systemctl daemon-reload
.zip and .tar.gz installations
Add the following line to /etc/security/limits.conf
elasticsearch - nofile 65535
Other ways of preventing memory swapping
There are other ways of preventing memory swapping other than using
bootstrap.memory_lock: false
Turn off all swapping on Linux option 1
sudo swapoff -a
This doesn’t require a restart of Elasticsearch.
To disable permanently (upon restart) edit /etc/fstab file
Comment out any lines containing “swap” below is just an example
#/dev/mapper/ubuntu--vg-swap_1 none swap sw 0
Turn off all swapping on Linux using sysctl option 2
Edit /etc/sysctl.conf
vm.swappiness=1
Checking memory swapping is effective
Run:
GET _nodes/stats/os
You should see the following in the response for each of the nodes:
"swap" : { "total_in_bytes" : 0, "free_in_bytes" : 0, "used_in_bytes" : 0 },