docker技巧

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

错误记录
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决办法
先解决第一条错误
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
原因分析:
操作系统的vm.max_map_count参数设置太小导致的
解决办法:
这里我们可以直接修改docker本身的参数,当然也可以直接修改宿主机本身的配置文件,需要注意的是在docker 容器中执行
sysctl -w vm.max_map_count=655360
会提示错误:
sysctl: setting key “vm.max_map_count”: Read-only file system
这是因为Docker的base image做的很精简,甚至都没有init进程,原本在OS启动时执行生效系统变量的过程(sysctl -p)也给省略了,导致这些系统变量依旧保留着kernel默认值,这时候需要我们在容器启动时加入 –privileged 来获取修改系统参数的权限
这里我选择的是修改宿主机本身的配置文件,然后重新启动镜像,也能解决问题,退出容器,返回到宿主机 
修改vm.max_map_count 可以通过命令行修改,但是在机器重启时会失效,所以通过修改配置文件来解决问题 
命令行修改办法:
sudo sysctl -w vm.max_map_count=655360
并用以下命令查看是否修改成功
sysctl -a | grep “vm.max_map_count”
修改配置文件:
sudo vim /etc/sysctl.conf
加入:
vm.max_map_count=262144
保存即可
接下来解决
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
这个问题
sudo vim /etc/security/limits.conf
加入以下两行:
redhat hard nofile 65536

redhat soft nofile 65536

redhat这里为用户名
然后重启启动elasticsearch即可