> 技术文档 > es启动报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least

es启动报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least


问题分析

根据日志,Elasticsearch (ES) 启动失败,报错信息明确指出:

  1. 错误原因max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    • Elasticsearch 要求系统参数 vm.max_map_count 至少为 262144,但当前系统配置为 65530,低于要求。
    • vm.max_map_count 是 Linux 内核参数,控制进程可拥有的最大内存映射区域数。ES 由于其内存密集型操作(如 Lucene 索引)需要较高的值。
  2. 其他信息

    • 日志显示 ES 绑定到非回环地址(non-loopback address),因此强制执行了引导检查(bootstrap checks)。
    • 启动失败后,ES 节点停止并关闭。

解决方案

需要调整系统的 vm.max_map_count 参数到至少 262144,以下是具体步骤:

1. 临时修改 vm.max_map_count

在 Linux 系统中,使用以下命令临时设置 vm.max_map_count

sudo sysctl -w vm.max_map_count=262144
  • 说明:此修改立即生效,但系统重启后会失效。
2. 永久修改 vm.max_map_count

为了确保重启后配置依然生效,需修改系统配置文件:

  1. 编辑 /etc/sysctl.conf/etc/sysctl.d/ 目录下的配置文件(例如 /etc/sysctl.d/99-elasticsearch.conf):
    sudo vi /etc/sysctl.conf
  2. 在文件末尾添加以下行:
    vm.max_map_count=262144
  3. 保存文件后,应用更改:
    sudo sysctl -p
3. 验证修改

检查 vm.max_map_count 是否已正确设置为 262144

sysctl vm.max_map_count

输出应为:

vm.max_map_count = 262144
4. 重新启动 Elasticsearch

修改完成后,重新启动 ES 服务:

sudo systemctl restart elasticsearch

或根据你的安装方式,使用适当的启动命令。

5. 检查日志

确认 ES 是否正常启动,检查日志文件:

cat /usr/share/elasticsearch/logs/my-es.log

确保没有类似 bootstrap checks failed 的错误,且节点状态显示为 started

预防措施

  • 检查其他引导检查:ES 在绑定到非回环地址时会执行多项引导检查(如文件描述符限制、堆大小等)。建议查看官方文档(https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html),确保所有配置符合要求。
  • 监控系统资源:确保服务器有足够的内存和 CPU 资源支持 ES 运行。
  • 定期检查日志:如果问题持续,检查完整日志以排查其他潜在问题。

总结

通过将 vm.max_map_count 设置为 262144(临时或永久),可以解决当前的启动错误。完成修改后,重新启动 ES 并验证其状态。