docker占用内存过大,导致系统崩溃
现象详情:AGX开机黑屏闪动,无法进入启动界面原因:AGX中docker产生日志数据过多,导致root下空间被完全占用无法启动解决思路:• 使用无线键盘的情况下,使用ctrl+alt+f1-f5均无法进入命令行,后发现是应为内存不足的原因导致无线键盘驱动无法加载,后更换有线键盘后,可以进入命令行界面,但是仍然闪动,输入用户密码后登录删除一些占用内存的文件后,终端不再闪动,可以进行操作。• 进入命令
现象详情:AGX开机黑屏闪动,无法进入启动界面
原因:AGX中docker产生日志数据过多,导致root下空间被完全占用无法启动
解决思路:
• 使用无线键盘的情况下,使用ctrl+alt+f1-f5均无法进入命令行,后发现是应为内存不足的原因导致无线键盘驱动无法加载,后更换有线键盘后,可以进入命令行界面,但是仍然闪动,输入用户密码后登录删除一些占用内存的文件后,终端不再闪动,可以进行操作。
• 进入命令行界面后,继续定位发现/var/lib/docker/overlay2占用内存空间过多,导致root下内存空间被完全占用。采用将/var/lib/docker/ 同步到挂载的512G的数据盘下,并更改docker的执行路径
4 迁移 /var/lib/docker 目录。
4.1 停止docker服务。
systemctl stop docker
4.2 创建新的docker目录,执行命令df -h,找一个大的磁盘。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:
mkdir -p /home/docker/lib
4.3 迁移/var/lib/docker目录下面的文件到 /home/docker/lib:
rsync -avz /var/lib/docker /home/docker/lib/
4.4 配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在,就新建。
- sudo mkdir -p /etc/systemd/system/docker.service.d/
- sudo vi /etc/systemd/system/docker.service.d/devicemapper.conf
4.5 然后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在 /home/docker/lib/docker )
[Service] - ExecStart=
- ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
4.6 重新加载 docker - systemctl daemon-reload
- systemctl restart docker
- systemctl enable docker
4.7 为了确认一切顺利,运行
docker info
命令检查Docker 的根目录.它将被更改为 /home/docker/lib/docker
- …
- Docker Root Dir: /home/docker/lib/docker
- Debug Mode (client): false
- Debug Mode (server): false
- Registry: https://index.docker.io/v1/
- …
4.8 启动成功后,再确认之前的镜像还在:
linlf@dacent:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
AAA/AAA v2 7331b8651bcc 27 hours ago 3.85GB
BBB/BBB v1 da4a80dd8424 28 hours ago 3.47GB
4.9 确定容器没问题后删除/var/lib/docker/目录中的文件。
• 此种方法并未解决根本问题,根本问题还在于减少docker日志所占的空间
对标准输入日志大小与数量进行限制
方式一:项目中已使用-v的方式挂载项目输出日志文件,因此对容器运行日志没有了需求,减少日志文件对存储空间的占用,以下配置分别为日志文件最大容量、最大日志文件数。
docker run … --log-opt max-size=10m --log-opt max-file=1
方式二:在docker的配置文件中进行 全局修改:新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数
{
“log-driver”:“json-file”,
“log-opts”: {“max-size”:“10m”, “max-file”:“1”}
}
重启docker的守护线程
systemctl daemon-reload
systemctl restart docker
注意:设置的日志大小规则,只对新建的容器有效
更多推荐
所有评论(0)