Hits: 70

docker 无法创建容器,提示内存不够;

Docker项目部署内存占用过高的问题解决

docker stats 查看内存

配置中都没有对docker内存以及jvm内存做任何限制,导致了我们docker容器启动,占用内存过大的问题

2.调整配置

2.1 调整jvm启动参数配置

首先我们对java启动时jvm内存大小做个调整,增加jvm启动参数-Xms1024M -Xmx1024M -Xmn256M -Xss256K
调整后的启动脚本start.sh如下

发现内存使用上已经根据我们调整的大小降了下来

2.2 调整容器启动内存限制

到这里,问题基本解决,不过看到容器的内存限制还是62G,这样显然还是不合理的,我们也要对容器进行调整,调整方式有两种

  • 方式一:在启动镜像的时候,指定容器内存大小:docker run -it -m 200M 镜像名
    直接指定容器最多使用 200M 物理内存和 200M swap。
  • 方式二:使用docker-compose 配置文件来配置容器内存大小的限制
    v2版本中,直接加入:mem_limit: 1024m #最大内存使用不超过1024m
    其中mem_limit用于控制容器默认启动时会使用 1/16*物理内存的现象,导致几个服就占满了全部内存。
  • v3版本中,配置如下:
    deploy:
          resources:
            limits:
              memory: 200M
             #cpus: '0.50' 加入cpu限制
            reservations:
              memory: 100M
    

    注意 deploy 仅 docker deploy stack 生效
    或使用 docker-compose –compatibility up 生效

ubuntu 16.04

如下这个没有效果

  • 查看自己的虚拟内存:dmidecode -t memory、top、free -m
  • 创建虚拟内存配置文件
    mkdir swap //穿件文件夹
    cd swap
    sudo dd if=/dev/zero of=swapfile bs=2048 count=100000 //其中bs是创建
    //的打小,单位为百kb,这个是创建204M,当然如果太大了可能会出问题,
    //我0.5G内存穿件204M时,第一次出错,第二次创建成功了,但是变成了如上的194M
    //之后会出现下面类似的提示,里面数值为你设置的大小
    记录了 100000+0 的读入
    记录了 100000+0 的写出
    102400000 字节 (102 MB) 已复制,0.74704 秒,137 MB/秒
    //把生成的文件转换成 Swap 文件
    sudo mkswap swapfile
  • 激活swap文件
    sudo swapon swapfile
    //之后会显示是否成功,如果一定要注意可能第二行的信息是Failed,
    //我的就是因为开大了而失败.此时,要重新运行一下这个命令,(如果过大会自动给你变动) 
    //如果需要卸载这个 swap 文件,可以进入建立的 swap 文件目录。执行下列命令。sudo swapoff swapfile

     

  • 注意:
    此时开的虚拟内存会在开机后消失,如果永久保持下去,在/etc/fstab文件尾添加一下信息:
    swapfilepath swap swap defaults 0 0
    例如:我的我是在/root/进行的配置,因此添加了下面内容
    /root/swap/swapfile swap swap defaults 0 0

正解:测试通过 ( 解决了重启后 docker 容器无法启动的问题 )

查看物理内存dmidecode -t memory

查看内存使用情况:top、free -m、free -h

查看虚拟内存:free -m、swapon -s

新建虚拟内存

新建1G虚拟内存 ,一般为真机的两倍:sudo fallocate -l 1G /icedustpan

查看虚拟内存:ls -lh /icedustpan

设置虚拟内存权限:

sudo chmod 600 /icedustpan
可以看到已经成功设置权限ls -lh /icedustpan

挂载虚拟内存 sudo mkswap /icedustpan

启用虚拟内存 sudo swapon /icedustpan

查看虚拟内存 swapon -s

设置自动挂载虚拟内存:

sudo vi /etc/fstab
/icedustpan none swap sw 0 0

 

提示 fallocate failed: Operation not supported

swapoff /dev/sda2  把旧的虚拟内存文件卸载
https://www.linuxhowto.net/how-to-add-swap-space-on-ubuntu-20-04/
dd if=/dev/zero of=/swapfile bs=1M count=1024  创建1G虚拟内存文件
将/dev/zero内容写入/swapfile,读写块大小1024bytes ,块个数1024。
/dev/zero是个未使用的文件模版,可以用它来创建“干净”的文件。后两个参数可以控制文件大小。
mkswap /swapfile 把这个文件变成swap文件
swapon /swapfile   激活使用这个swap文件
设置开机启用

 vi /etc/fstab ,添加如下内容
/swapfile swap swap defaults 0 0

swapon –show (swapon -s)   查看虚拟内存

提示 swapon failed: Device or resource busy