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

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

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

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

sudo swapoff -a

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

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

# /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的值,执行如下命令:

cat /proc/sys/vm/swappiness

输出如下:

20

或者执行如下命令:

sysctl vm.swappiness

输出如下:

vm.swappiness = 20

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

sudo sysctl -w vm.swappiness=30

输出如下:

vm.swappiness = 30

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

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

bootstrap.memory_lock: true

修改后需要重启ElasticSearch进程。

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

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"

执行结果的样例,如下:

{
"nodes" : {
"aKgBu7LgS9a6iPYH8n2JPw" : {
"process" : {
"mlockall" : false
}
}
}
}

mlockalltrue,说明增加参数后,mlockall如预期生效。

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

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

sudo sh -c "ulimit -a"

执行结果的样例,如下:

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用户增加权限,命令样例如下:

ulimit -l unlimited
./bin/elasticsearch

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

# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

相关资料

ElasticSearch之禁用交换分区的更多相关文章

  1. [转]Linux Swap交换分区、交换文件

    free -m 在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存.那么,万一有一天你需要了呢,难道要重装系统?大可不必,在 ...

  2. mount挂载和交换分区swap

    目录 mount挂载 挂载方法 选项 查看设备 卸载命令 文件挂载配置文件fstab 交换文件与分区 swap优先级 三个工具free,df,du 扩展 移动介质 使用光盘 挂载USB设备 mount ...

  3. linux(centos8): 临时关闭/永久关闭交换分区swap?

    一,为什么要关闭swap? 1,swap的用途? swap 分区就是交换分区,(windows平台叫虚拟内存) 在物理内存不够用时, 操作系统会从物理内存中把部分暂时不被使用的数据转移到交换分区, 从 ...

  4. Linux下swap(交换分区)的增删改

    swap介绍 Linux 的交换分区(swap),或者叫内存置换空间(swap space),是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合.交换分区的作用是,当系统物理内存吃 ...

  5. centos 创建swap 交换分区

    阿里云的服务器是没有交换分区的,如 [www-data@iZbp1ivdq1ie5lmrhp13kjZ ~]$ free -m total used free shared buff/cache av ...

  6. Linux Swap交换分区介绍总结

    Swap交换分区概念   什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料: Linux divides its physical RA ...

  7. Linux中的SWAP交换分区

    大多数 Linux 在系统安装时都会提醒并建议你划分一个 SWAP 交换分区,如果你是从 Windows 切换到 Linux 的新用户,兴许对这个 SWAP 会感到十分疑惑. SWAP 交换分区到底是 ...

  8. Linux设置交换分区swap

    参考: http://www.vpser.net/opt/vps-add-swap.html https://www.zntec.cn/archives/vps-swap.html http://yz ...

  9. linux两种增加交换分区(swap)的方法

    在安装Oracle后,为使Oracle流畅运行,需要手动增加linux的交换分区(相当于Windows下的虚拟内存)的大小,本文介绍两种增加交换分区(swap)的方法. 第一种方法:新建分区 1.fd ...

  10. centos6.5下磁盘创建交换分区

    1.创建磁盘交换分区 2.创建文件交换分区

随机推荐

  1. Azure Data Factory(八)数据集验证之服务主体(Service Principal)

    一,引言 如下图所示,今天我们接着上一篇内容,继续讲解 Azure Data Factory 中的数据集连接服务的认证方式:Service Principal 关于 Service Principal ...

  2. Avalonia开发(一)环境搭建

    一.介绍 开源 GitHub:https://github.com/AvaloniaUI/Avalonia/ 多平台支持,包括Windows.mac OS.Linux.iOS.Android.Sams ...

  3. Solution Set -「CF 1520」

    「CF 1520A」Do Not Be Distracted! Link. 模拟. #include<bits/stdc++.h> char now; char get_char(){ch ...

  4. ArcGIS将遥感影像的0值设置为NoData

      本文介绍在ArcMap软件中,将栅格图层中的0值或其他指定数值作为NoData值的方法.   在处理栅格图像时,有时会发现如下图所示的情况--我们对某一个区域的栅格数据进行分类着色后,其周边区域( ...

  5. Apollo2.1.0+Springboot使用OpenApI

    依赖管理 <!-- bootstrap最高级启动配置读取 --> <dependency> <groupId>org.springframework.cloud&l ...

  6. gitlab ci 用 cypress/playwright 做测试并展示结果至 mr

    前言 看了一下官方的教程好像都没有讲怎么将测试结果展示出来,只是给出测试的 ci 脚本,但根据 gitlab 官方的文档是有测试报告的展示的,所以这里给出一个基于 junit 测试报告的展示. 前期准 ...

  7. 如何通过SK集成chatGPT实现DotNet项目工程化?

    智能助手服务 以下案例将讲解如何实现天气插件 当前文档对应src/assistant/Chat.SemanticServer项目 首先我们介绍一下Chat.SemanticServer的技术架构 Se ...

  8. 更改Kali Linux系统语言以及安装zenmap

    更改Kali Linux系统语言以及安装zenmap 在使用kali的过程中,会遇到许多问题,其中一个就是看不懂英语,下面是如何更换语言的步骤. 更改Kali Linux系统语言 首先,打开kali, ...

  9. js前端操作,c#后端下发xml文件

    前端: var xmlLanguageDoc; $.ajax({         url: "/GiveMeXML",//此处可随意定义,不一定是路径.在c# ,请求被捕获后,由c ...

  10. 浅析KV存储之长尾时延解决办法

    本文分享自华为云社区<浅析KV存储之长尾时延问题,华为云 GeminiDB Redis 探寻行业更优解决方案!>,作者:华为云数据库GaussDB NoSQL团队. 目前,KV存储的广泛使 ...