前言
相信很多人在启动elasticsearch 5
版本以上的应用过程中曾被以下错误终止启动了。
max virtual memory areas vm.max_map_count [%d] is too low, increase to
at least [%d]
下面我们尝试修改elasticsearch
源码跳过这个限制。。。为啥会有这个想法,因为有时候我们单纯下载到docker
镜像里面跑一下学习一下而已,不想修改宿主机配置或者不便于修改宿主机配置。虽然装elasticsearch 2
版本没这个错误提示,但是系列比较老了,没法体验新版elasticsearch的特性。下面我们来尝试这个操作来熟悉elasticsearch
源码修改并且编译打包过程,一方面能熟悉elasticsearch打包流程,另外也方便后续调试和阅读elasticsearch
代码。
实践环境
Mac
其他系统流程类似。IDEA
elasticsearch 6.6.2
源码下载地址 https://download.csdn.net/download/bojie5744/11236495
(更多版本源码查看 https://github.com/elastic/elasticsearch/releases )openjdk-11
编译elasticsearch 6.6.2
源码的要求,不然会报错At least Java 11 is required
。下载地址: https://download.csdn.net/download/aqtata/10687785 (dmg安装包,CSDN下载比较快,官网比较慢)
使用idea导入项目
发现提示错误,You must run gradle idea from the root of elasticsearch before importing into IntelliJ
,也就是我们在导入项目前需要先在项目根目录执行./gradlew idea
命令。
执行java -version看看是不是已经是java 11了,如果不是,那么我们需要先执行 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
设置java环境,然后再执行./gradlew idea
。
执行完毕,回去刷新build状态,可以看到全部都绿色打勾了。
修改源码代码
在工程通过搜索max virtual memory areas vm.max_map_count
找到目标java文件。
把红色框框的注释掉。
打包源码
./gradlew assemble --parallel
完毕后,我们可以把该打包源码部署到其他的机器上,解压后执行./bin/elasticsearch就会发现原本有max_map_count
限制的错误提示没有了,程序也启动起来了。