ElasticSearch之禁用交换分区

操作系统将进程加载至内存中执行时,对于当前未使用到的内存页,可能会将相关内存页交换至硬盘上,即swap

对于性能敏感、时延敏感的应用程序比如ElasticSearchswap特性会明显影响性能和稳定性,因此最好禁用swap特性。

对于Linux环境,目前有如下手段可以禁用swap特性。

临时关闭swap的方法,执行如下命令:

shell 复制代码
sudo swapoff -a

本方法不需要重启Linux系统,但系统重启后即失效。

修改/etc/fstab,去掉包含swap的行,这样系统重启后,就不会自动挂载swap相关的分区。

shell 复制代码
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda8 during installation
UUID=124a4216-e11f-4dfb-9884-ea53ee46c8d8 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda9 during installation
UUID=317d9a34-6d00-4278-bcaa-bcb3b37fc58c none            swap    sw              0       0

修改vm.swappiness的值为1,可以极大的降低进程的内存页被交换至硬盘的概率。

查看Linux系统当前vm.swappiness的值,执行如下命令:

shell 复制代码
cat /proc/sys/vm/swappiness

输出如下:

shell 复制代码
20

或者执行如下命令:

shell 复制代码
sysctl vm.swappiness

输出如下:

shell 复制代码
vm.swappiness = 20

修改vm.swappiness的值,执行如下命令:

shell 复制代码
sudo sysctl -w vm.swappiness=30

输出如下:

shell 复制代码
vm.swappiness = 30

利用Linux系统的mlockall方法,禁止将内存页交换至硬盘。

修改ElasticSearch的配置文件elasticsearch.yml,增加如下参数:

yml 复制代码
bootstrap.memory_lock: true

修改后需要重启ElasticSearch进程。

检查mlockall是否生效,执行如下命令:

shell 复制代码
curl -X GET "https://localhost:9200/_nodes?filter_path=**.mlockall&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPH=QBE+s5=*lo7F9"

执行结果的样例,如下:

shell 复制代码
{
  "nodes" : {
    "aKgBu7LgS9a6iPYH8n2JPw" : {
      "process" : {
        "mlockall" : false
      }
    }
  }
}

mlockalltrue,说明增加参数后,mlockall如预期生效。
mlockallfalse,说明增加参数后,mlockall未能生效,原因则可能是运行ElasticSearch的用户缺少锁定内存的权限。

检查当前用户的权限,执行如下命令:

shell 复制代码
sudo sh -c "ulimit -a"

执行结果的样例,如下:

shell 复制代码
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        8192
coredump(blocks)     0
memory(kbytes)       unlimited
locked memory(kbytes) 65536
process              15172
nofiles              1024
vmemory(kbytes)      unlimited
locks                unlimited
rtprio               0

假如判定和权限相关,则有如下解决方法。

在启动ElasticSearch前,使用root用户增加权限,命令样例如下:

shell 复制代码
ulimit -l unlimited
./bin/elasticsearch

或者修改/etc/security/limits.conf,增加如下配置。

shell 复制代码
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

相关资料

相关推荐
G皮T1 分钟前
【Elasticsearch】深度分页及其替代方案
大数据·elasticsearch·搜索引擎·scroll·检索·深度分页·search_after
IC 见路不走33 分钟前
LeetCode 第91题:解码方法
linux·运维·服务器
翻滚吧键盘1 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
小能喵1 小时前
Kali Linux Wifi 伪造热点
linux·安全·kali·kali linux
汀沿河1 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
zly35001 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
小哥山水之间2 小时前
基于dropbear实现嵌入式系统ssh服务端与客户端完整交互
linux
ldj20202 小时前
2025 Centos 安装PostgreSQL
linux·postgresql·centos
翻滚吧键盘2 小时前
opensuse tumbleweed上安装显卡驱动
linux
G皮T3 小时前
【Elasticsearch】检索排序 & 分页
大数据·elasticsearch·搜索引擎·排序·分页·检索·深度分页