docker容器增加内存
现象:
- 在运行docker容器的时候,当运行多个容器,或者其中一个容器占用内存比较大的时候,另一个容器中的任务会挂掉。
- 比如某一个容器同时运行 Hadoop + Hive,另一个容器运行 Mysql ,就会导致Mysql容器自动挂掉.
排查原因:
- 使用:docker stats 查看容器动态资源使用情况时,如下:
可以看到,h01表示Hadoop的master节点,且这个容器中还安装、运行着 Hive,占用内存为: 1.347G/1.939G,且Mysql也占用了一些内存,他们是共享这2G的内存的,已经接近最大内存上限了。
如上图,可以看到频繁的进行内存交换,资源释放。
解决办法:
- 这是由于电脑分配给 Docker的内存太少了,默认是分配 2G的内存给 Docker,需要将电脑分配给Docker的内存设置更大一点。
- 先将 docker中运行的容器都停掉 :docker stop container_id
- docker -> Dashboard -> Settings -> Resources
如上图所示,将 Memory 调为 4G,将Swap 调为 2G,点击 Apply & Restart即可。
- 重启之后,看到docker容器的资源如下:
可见,最大内存已经变为 3.84G了。
反馈结果:
- 当设置后,再启动 Hadoop 、Hive 、Mysql后,能正常运行Hive程序,且资源使用情况如下:
可见,容器的内存使用超出 2G了,之前的 2G限制确实满足不了使用需求。