广告区域

广告区域

传奇知识网 - 一个你身边的百科全书

磁盘占用100%怎么解决(磁盘100严重排查和解决方案)

2023-05-20 00:07:23投稿人 : yq4qlskj围观 : 75 次0 评论

最近遇到一个服务器问题:磁盘满了,占用率100%~

这个问题太普遍了,我们先来看看哪些文件占用了很多磁盘。

I .检查磁盘占用率是否为100%

1.1检查磁盘使用的总体情况。

第一个命令是df -h,用于检查磁盘使用情况。Df是disk free的缩写,用于显示Linux系统上文件系统磁盘的使用情况统计。

如下图所示,可以看到磁盘占用率为100%。

第一列Filesystem表示文件系统的名称。

第二列的大小表示文件系统的大小。

使用的第三列表示已经占用了多少磁盘空。

第四列Avail表示可用磁盘之间的大小空。

在第五列中,Use%表示磁盘使用了多少,100%表示磁盘已满。

第六列“安装在”表示它安装在哪个目录中。

从上面的结果可以看出,有一个文件系统的占用率为100%,挂载的目录是/,那么我们就来看看这个目录下存放了哪些大文件。

1.2查看目录中的大文件

使用du命令显示目录或文件占用的磁盘空的大小。

#先进入到根目录`/`cd/#列出当前目录或文件的总大小,并按倒叙排序du-sh/*|sort-nr

找到最大的目录var,占用100 g以上,进入这个目录,再次执行du命令。

du-sh/var/*|sort-nr

这样就可以找到空之间占用空间最大的文件。

最后发现Logstash容器的日志文件占用过多,截图如下。你可以看到,它占用了4.8G,这是我清理日志后的大小。之前这个集装箱占了90多克。

1.3为什么logstash容器会占用这么大的磁盘?

为什么Logstash容器中有这么多日志???

让我们来看看这个日志的内容。使用tail命令查看文件中的最后100行数据。

tail-n100-json.log#也可以通过dockerlogs来查看日志dockerlogs--tail=100159

发现Logstash解析日志时,所有信息都打印出来了。如下图所示:

每次Filebeat收集日志并传输到Logstash时,Logstash都会打印一个解析后的日志。

而且我们的后端服务会打印很多日志,越来越多的日志会传输到Logstash。Logstash会疯狂的写自己的解析日志,久而久之磁盘就会被占用

问题的原因已经找到了,那么解决方法是什么呢?

二、容器日志清理方案

  • 方案一:手动清理日志文件可以解燃眉之急,治标不治本。

  • 方案二:脚本定期清理日志文件,缺点是日志文件全部丢失,无法追溯。

    方案三:限制所有容器的日志文件大小来解决问题,但缺点是需要重新创建容器,需要启动docker镜像。

    2.1方案1:手动清洗方案cat/dev/null>/var/lib/docker/containers/容器id/容器id-json.log

    注意:这里不使用rm删除文件。用rm -rf删除日志后,你会发现disk 空并不是通过df -h H释放的,原因是在Linux或者Unix系统中,通过rm -rf或者file manager删除文件会与文件系统的目录结构解除链接。如果文件是打开的(有一个进程在使用),那么这个进程仍然能够读取文件,并且磁盘空将一直被占用。正确的姿势是cat/dev/null >*-json.log,当然也可以通过rm -rf删除,重启docker。

    2.2选项2:定期清理脚本。

    提供一个清理脚本。

    #!/bin/shecho"========startcleandockercontainerslogs========"logs=$(find/var/lib/docker/containers/-name*-json.log)forlogin$logsdoecho"cleanlogs:$log"cat/dev/null>$logdoneecho"========endcleandockercontainerslogs========"

    向脚本添加权限

    chmod+xclean_docker_log.sh

    执行脚本的命令

    ./clean_docker_log.sh

    可以将执行脚本的命令添加到Linux的调度任务中,这里不展开。

    我要说的是我目前使用的方案。

    2.3选项3:限制Docker容器日志大小。

    创建/etc /etc/docker/daemon.json如果有,不需要创建。

    vim/etc/docker/daemon.json

    配置内容如下:

    {"log-driver":"json-file","log-opts":{"max-size":"500m","max-file":"3"}}

    Max-size=500M,表示容器的日志文件大小的上限是500M,max-file=3,表示容器有三个日志。当第一个日志满500M时,写入第二个日志,当第二个日志满500m时,写入第三个日志。如果第三个日志已满,清除空第一个日志文件并重写第一个日志文件。如下图所示:

    已经写入了三个日志文件,最大大小为500M。

    更改之后,您需要重新启动docker守护进程。

    systemctldaemon-reloadsystemctlrestartdocker

    另外,这个方法只对新创建的容器有效,之前的容器无效,所以我删除了之前的Logstash容器,重新启动了一个Logstash容器。

    来源:传奇知识网,转载请注明作者或出处,尊重原创!

    相关文章

    发表评论
    推荐文章