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

相关资料

相关推荐
Red丶哞15 分钟前
Stitching Together Multiple Input and Output Plugins
elasticsearch
rainFFrain2 小时前
日志与策略模式
linux·运维·vscode·策略模式
林政硕(Cohen0415)3 小时前
Linux驱动开发进阶(四)- 内存管理
linux·驱动开发·内存管理
sqmeeting3 小时前
Linux NUC小主机化身视频会议服务器: 技术优势与部署实战
linux·服务器·windows·音视频·实时音视频
愚润求学6 小时前
Linux开发工具——apt
linux·服务器·开发语言
杰克逊的日记6 小时前
CentOs系统部署DNS服务
linux·python·centos·dns
2401_897930066 小时前
Kibana 连接 Elasticsearch(8.11.3)教程
大数据·elasticsearch·jenkins
知立6 小时前
嵌入式Linux开发环境搭建,三种方式:虚拟机、物理机、WSL
linux·开发环境·嵌入式linux
the_nov6 小时前
25.Reactor
linux·c++
小王努力学编程7 小时前
【Linux系统编程】进程概念,进程状态
linux·运维·服务器·c++