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

相关资料

相关推荐
我爱学习好爱好爱21 小时前
Ansible 常用模块详解:lineinfile、replace、get_url实战
linux·python·ansible
吴声子夜歌1 天前
TypeScript——基础类型(三)
java·linux·typescript
DA02211 天前
系统移植-STM32MP1启动详解(BootROM)
linux·bsp·系统移植
春日见1 天前
自驾算法的日常工作?如何提升模型性能?
linux·人工智能·机器学习·计算机视觉·自动驾驶
李彦亮老师(本人)1 天前
【Linux系统】Rocky Linux 9.7操作系统简介
linux·运维·服务器·docker·kubernetes
minji...1 天前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
A.A呐1 天前
【Linux第二十章】socket
linux
何中应1 天前
Grafana如何重置密码
linux·运维·服务器·grafana
charlie1145141911 天前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(3)inittab 与 init 系统:Linux 启动的“第一号进程“全解析
linux·驱动开发·学习·嵌入式开发·嵌入式linux
xlp666hub1 天前
深度剖析 Linux Input 子系统(3):从零写一个 Input 驱动,最详细手把手(附完整代码)
linux·面试