zoukankan      html  css  js  c++  java
  • Docker 容器磁盘占用100%

    转自:https://blog.51cto.com/laok8/2461434?source=dra

    问题:

    root@anxxxx-prod1:~# df -h
    Filesystem                                       Size  Used Avail Use% Mounted on
    udev                                             3.9G     0  3.9G   0% /dev
    tmpfs                                            799M  3.4M  795M   1% /run
    /dev/vda1                                         99G   96G     0 100% /
    tmpfs                                            3.9G  548K  3.9G   1% /dev/shm
    tmpfs                                            5.0M     0  5.0M   0% /run/lock
    tmpfs                                            3.9G     0  3.9G   0% /sys/fs/cgroup
    3f5be49b80-fuf99.cn-shanghai.nas.aliyuncs.com:/   10P   18G   10P   1% /mnt
    none                                              99G   96G     0 100% /var/lib/docker/aufs/mnt/da4441ba96f3a657e90e289da6f59090bb41baba95355b1b62e239e0000a17af
    none                                              99G   96G     0 100% /var/lib/docker/aufs/mnt/aaf7527a3a42fc6d3695dc95d6ddb6bc6473337bf14d5fa3debf4ba70c5be70e
    shm                                               64M     0   64M   0% /var/lib/docker/containers/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45/shm
    shm                                               64M     0   64M   0% /var/lib/docker/containers/f0fbd839ff52f77a9f1d4a13772194553c2a3d52f8cd76547da696c6e683973a/shm
    tmpfs                                            799M     0  799M   0% /run/user/0
    none                                              99G   96G     0 100% /var/lib/docker/aufs/mnt/3ca913d1e6aad8c7908c949b4f2472fde89d1c6f10d2fb29779287fa4c9c3efb
    shm                                               64M     0   64M   0% /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/shm

    删除了镜像之后,只是减少了轻微的used使用率(减少了3G空间)

    紧接着清理虚悬镜像

    docker system prune -a

    查找系统中的大文件

     find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr # 查找"/"目录下所有大于100M的所有文件
    ...
    ...
    175M    /root/log/monolith/monolith.2019-11-23.09.log
    175M    /root/log/monolith/monolith.2019-11-23.07.log
    175M    /mnt/backup/mysql/backup/2019-08-01-22:28:56/prod-mysql.mysql.rds.aliyuncs.com/data/db_ankobot.sql.gz
    125M    /root/log/monolith/monolith.2019-12-10.11.log
    123M    /mnt/test.ankobot.com/uploads/facesets/facesets.zip
    121M    /root/log/monolith/monolith.2019-11-23.05.log
    69G /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d-json.log
    1.7G    /var/lib/docker/containers/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45/019052bc4d2c1c0367abdca83222ca2dc4a9bc88a264aa5d8e1f4575f4f59d45-json.log
    0   /proc/kcore

    发现/var/lib/docker/containers/{container_id}/下存在数据较大的*-json.log日志文件,百度发现这是docker容器运行的标准输入日志,遂删除之。项目中已使用-v的方式挂载项目输出日志文件,因此对容器运行日志没有了需求,研究后发现在构建参数的时候可以对标准输入日志大小与数量进行限制,以减少日志文件对存储空间的占用,以下配置分别为日志文件最大容量、最大日志文件数
    清空了日志文件

    root@anxxxx-prod1:~# echo '' > /var/lib/docker/containers/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d/bc9fe7700f8c8f5d249ff2e710515218969b0f09bd39d82d90e6622f71f8152d-json.log
    docker run ...... --log-opt max-size=10m --log-opt max-file=1

    也可以在docker的配置文件中进行全局修改:新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数(daemon.json参数说明:

    {
       "log-driver":"json-file",
       "log-opts": {"max-size":"10m", "max-file":"1"}
    }

    二:另一篇

    rancher的介绍中也有docker相关的 “docker调优”:https://docs.rancher.cn/rancher2x/install-prepare/best-practices/docker.html

    1、新建/etc/docker/daemon.json,若有就不用新建了

    2、添加log-dirver和log-opts参数,样例如下

    "log-driver":"json-file",
    "log-opts":{ "max-size" :"100m","max-file":"1"}

    max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json

    3、重启

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    这样就好啦,注意:只对新建的容器有效
    参考资料:
    https://zhuanlan.zhihu.com/p/29051214
    https://docs.docker.com/engine/admin/logging/overview/#configure-the-logging-driver-for-a-container

    ===============================
    清除大日志文件

    容器日志一般存放在/var/lib/docker下面,可使用如下命令查看各个日志的文件大小

    ls -lh $(find /var/lib/docker/containers/ -name *-json.log)

    如何清理日志

    如果docker容器正在运行,那么使用rm -rf 方式删除日志后,通过df -h会发现磁盘空间并没有释放

    原因:在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用

    正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm删除后重启docker

     
  • 相关阅读:
    linux less命令用法
    Spark-RDD 模型 以及运行原理
    Spark 架构原理介绍 以及 job、task、stag 概念
    Kafka 基本概念以及框架介绍
    负载均衡- TCP/ IP 基础知识
    JAVA多线程和并发基础面试题
    Java并发使用--线程池
    Java基础--并发编程
    事务实现原则(一) 事务的改变以及JDBC事务的设计
    Spark RDD Transformation和Action
  • 原文地址:https://www.cnblogs.com/sheseido/p/13039793.html
Copyright © 2011-2022 走看看