es启动报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least
问题分析
根据日志,Elasticsearch (ES) 启动失败,报错信息明确指出:
-
错误原因:
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 索引)需要较高的值。
- Elasticsearch 要求系统参数
-
其他信息:
- 日志显示 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
为了确保重启后配置依然生效,需修改系统配置文件:
- 编辑
/etc/sysctl.conf
或/etc/sysctl.d/
目录下的配置文件(例如/etc/sysctl.d/99-elasticsearch.conf
):sudo vi /etc/sysctl.conf
- 在文件末尾添加以下行:
vm.max_map_count=262144
- 保存文件后,应用更改:
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 并验证其状态。