本地启动 elasticsearch 时,因虚拟内存太小,启动不起来
现象描述
- 新装机 xubuntu 后,第一次装 elasticsearch。
- 命令
> docker images
后有docker.quncrm.com/elastic/elasticsearch 5.3.2
表明已拉取了镜像。 - 启动一个容器
docker run -d -p 9200:9200 --name elasticsearch docker.quncrm.com/elastic/elasticsearch:5.3.2
,没有现象 - 此时
docker ps
是没有的,因为失败了,所以加上docker ps -a
可以看到存在 - 此时可以查看容器中 log 输出,命令:
docker logs elasticsearch --tail 30
,输出最末30行 - 查看到有一条信息:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 查询网上解释后,是因为系统设置
vm.max_map_count
值太小的原因
max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。调优这个值将限制进程可拥有VMA的数量。限制一个进程拥有VMA的总数可能导致应用程序出错,因为当进程达到了VMA上线但又只能释放少量的内存给其他的内核进程使用时,操作系统会抛出内存不足的错误。如果你的操作系统在NORMAL区域仅占用少量的内存,那么调低这个值可以帮助释放内存给内核用。参考
修复
- 可修改
/etc/sysctl.conf
文件,加上(或修改)配置vm.max_map_count=655360
- 最后再执行
sysctl -p
重新装载配置
延伸
- 另外在用 vsCode 时,有报错因项目工程太大而无法监控:“Visual Studio Code is unable to watch for file changes in this large workspace”
- 这同样需要改此文件的配置,加上一条
fs.inotify.max_user_watches = 524288
- 再重新装载即可
- 之后可去了解下
sysctl.conf
有哪些可用配置
网友评论