Linux怎么调优vm.max_map_count为Elasticsearch预留足够内存映射

老晨同学_8960

老晨同学_8960

2026-11-01

730人浏览

原创

Elasticsearch 8.x 启动失败因 vm.max_map_count 默认值65530低于要求的262144,需通过 sysctl -w 临时调整或修改 /etc/sysctl.conf 永久生效,并配套设置 ulimit -n、ulimit -u 和 swapoff。

linux怎么调优vm.max_map_count为elasticsearch预留足够内存映射

为什么 Elasticsearch 启动报 vm.max_map_count 不足

Elasticsearch 8.x 默认要求 vm.max_map_count ≥ 262144,否则在 Bootstrap Checks 阶段直接退出,日志里明确出现:bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]。这不是警告,是硬性拦截——哪怕其他配置全对,这个值不够,进程就起不来。

根本原因是 ES 大量使用 mmap 加载索引文件(每个 segment、每个倒排文件都对应一个或多个 VMA),而默认内核值 65536 在中等规模集群下很快耗尽。注意:这和物理内存大小无关,只和进程能创建的虚拟内存区域数量有关。

临时调高 vm.max_map_count 立即生效

执行命令即可让当前运行的内核立刻接受新值:

sysctl -w vm.max_map_count=262144

验证是否生效:

sysctl -a | grep vm.max_map_count

常见误区:

  • sysctl -w 只影响当前会话,重启后失效
  • 必须用 root 权限执行,普通用户会提示 Permission denied
  • 如果容器里执行该命令,宿主机参数未改,容器重启后仍可能恢复旧值(取决于是否挂载 /proc/sys)

永久生效要改 /etc/sysctl.conf

编辑系统级配置文件,确保每次启动都加载:

Linux Security Scanner
Linux Security Scanner

Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...

下载
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf

然后加载全部配置(不只是刚加的那行):

sysctl -p

关键检查点:

  • 确认没有拼写错误,比如写成 vm.max_map_count=262144(等号前后不能有空格)或漏掉 =
  • 某些发行版(如 CentOS Stream 9)可能需额外执行 systemctl restart systemd-sysctl 才能确保生效
  • 若用 Docker 部署,仅改宿主机 /etc/sysctl.conf 不够,还需在 docker run 时加 --sysctl vm.max_map_count=262144,或在 docker-compose.yml 的 sysctls 字段声明

别忘了配套调 ulimit -n 和关 swap

vm.max_map_count 不是孤立参数。Elasticsearch 同时依赖:

  • ulimit -n 65535:文件描述符上限,否则打开大量 shard 或 index 时触发 Too many open files
  • ulimit -u 4096:单用户最大进程/线程数,避免因并发线程过多被限制
  • swapoff -a:ES 明确禁止 swap,否则 GC 行为不可控;即使设了 bootstrap.memory_lock: true,swap 未关也会导致启动失败

这些限制在 systemd 服务中容易被忽略——ES 用 systemctl 启动时,ulimit 值默认继承自 systemd 全局设置,需在 /etc/systemd/system/elasticsearch.service.d/override.conf 中显式配置 LimitNOFILE=65535 和 LimitNPROC=4096。

真正容易被跳过的,是容器场景下对宿主机参数的双重确认:既要改 /etc/sysctl.conf,也要在容器启动时透传;既要设 vm.max_map_count,也不能漏掉 memlock 和 nofile 的 cgroup 限制。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.20

3528

5

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

650

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

343

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

533

20

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.27

303

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4330

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3653

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2913

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7170

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习