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

这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘。

一、排查磁盘占用率 100%

1.1 查看磁盘使用的大致情况

第一个命令就是 df -h,来查看磁盘的占用情况。df 是 disk free 的缩写,用于显示目前在 Linux 系统上的文件系统磁盘的使用情况统计。

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

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

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

第三列 Used 表示已占用多大的磁盘空间。

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

第五列 Use% 表示磁盘使用率多大,100% 表示磁盘占满了。

第六列 Mounted On 表示挂载在哪个目录。

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

1.2 查看目录下的大文件

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

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

找到最大的目录 var,占用 100 多个 G。进入到这个目录中,然后再次执行 du 命令。

du -sh /var/* | sort -nr

这样一级一级地找,就能找到占用空间最大的文件了。

最后发现是 Logstash 容器的日志文件占用太大,截图如下:

大家看到的占用 4.8G,这是我清理日志之后的大小,之前这个容器占用 90 多个 G。

1.3 Logstash 容器为什么占用磁盘这么大

为啥 Logstash 容器会有这么多日志???

我们看下这个日志里面的内容就知道了。使用 tail 命令查看文件的最后 100 行数据。

tail -n 100 <容器 id >-json.log
# 也可以通过 docker logs 来查看日志
docker logs  --tail=100 159

发现全都是 Logstash 解析日志时打印的信息。如下图所示:

每次 Filebeat 采集日志后,传输给 Logstash 后,Logstash 都会打印一条解析后的日志。

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

问题原因找到了,那解决方案是什么呢?

二、容器日志清理方案

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

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

  • 方案三:限制所有容器的日志文件大小,治本,缺点是需要重新创建容器和启动 docker 镜像。

2.1 方案一:手动清理方案

cat /dev/null > /var/lib/docker/containers/容器id/容器id-json.log

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

2.2  方案二:脚本定期清理

提供一个清理脚本。

#!/bin/sh echo "======== start clean docker containers logs ========"  logs=$(find /var/lib/docker/containers/ -name *-json.log)  for log in $logs  do  echo "clean logs : $log"  cat /dev/null > $log  done  echo "======== end clean docker containers logs ========"

给脚本添加权限。

chmod +x clean_docker_log.sh

执行脚本的命令。

./clean_docker_log.sh

大家可以把执行脚本的命令加到 Linux 的定时任务中就可以了,这里不做展开。

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

2.3 方案三:限制 Docker 容器日志大小

新建 /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 就写第三个,如果第三个满了,就清空第一个日志文件,重新写第一个日志文件。如下图所示:

写了 3 个日志文件,最大不超过 500M

改完之后需要重启 docker 守护进程。

systemctl daemon-reload
systemctl restart docker

另外这种方式只对新建的容器有效,之前的容器不生效,所以我又把之前的 Logstash 容器删除了,然后重新启动了一个 Logstash 容器。

一次磁盘占用率 100% 的排查经历!相关推荐

  1. 一次磁盘占用率 100% 的排查记录

    你好,我是悟空. 最近遇到一个服务器的问题:磁盘满了,占用率 100%~ 这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘. 一.排查磁盘占用率100% 1.1 查看磁盘使用的大致情况 第一 ...

  2. 磁盘占用率100%——多番尝试

    [前言]      近日,我一直受磁盘占用率100%的困扰.每次开机都要等一会儿才能用,否则就有可能卡死必须重启才行.如下:而且,当运行程序稍微多一点的时候,也会卡慢.于是我在网上查了有关解决的办法. ...

  3. 全面解决win10 磁盘占用率100%问题

    首先我们应该查看是什么原因导致磁盘占用率100% 1.首先利用驱动管理软件(比如鲁大师)检查电脑驱动是否有问题,若驱动显示没有错误,可以肯定磁盘占有率过高和驱动无关. 2.利用杀毒软件检测电脑是否中病 ...

  4. win10内存占用率过高怎么办_任务管理器中磁盘100%怎么解决?Win10磁盘占用率100%解决方法...

    如今,新电脑标配安装都是Win10系统,这也是操作系统的趋势,不过我们在使用Win10的时候,难免会出现一些小问题,例如电脑出现卡顿的现象,我们经常会查看任务管理器硬件占用情况,而在任务管理器中查看磁 ...

  5. 吐血解决磁盘占用率100%

    吐血解决磁盘占用率100% 问题简述 解决步骤 吐血解决 磁盘利用率高的建议 问题简述 一次偶然使用电脑后,发现每次开机后,磁盘长时间占用率达到100%,带来的影响是打开浏览器,打开本地电脑磁盘特别卡 ...

  6. 七、磁盘占用率100%的解决方案

    磁盘占用率100%的解决方案 1.同时按Win键+R键,输入regedit,点确定: 2.在注册表中找到HKEY_LOACAL_MACHINE,并展开它: 3.接着找到SOFTWARE-Microsl ...

  7. 解决WIN8磁盘占用率100%的问题电脑从WINXP换WIN7,WIN8非电脑配置低档但系统运行很卡的问题。——硬盘4K对齐

    前段时间电脑刚装WIN8很卡,磁盘占用率100%,网上找了好多教程不行,最后朋友处得知是硬盘没有4K对齐. 首先 一般出现这样的问题大多是西数.希捷.日立这几个品牌的硬盘, 废话不多说了 直接上教程 ...

  8. 记录一次自己的电脑磁盘占用率100%的遭遇

    更新:这几天占用率又100%了 继续检查错误 是系统会自动整理磁盘碎片 果然是正版系统受害者. 关闭系统的文件索引服务 关闭自动整理磁盘服务 暂停SrTasks.exe进程. 系统空闲时候会创建系统还 ...

  9. Windows10磁盘占用率100%(ntoskrnl占用资源)导致系统卡顿

    欢迎大家关注我的公众号,会不定期更新一些开发与测试的一些技术文章. 电脑从前几天开始总是莫名其妙卡顿,打开任务管理器后发现System一直占用很高, 通过下图所示打开占用系统资源的文件位置 发现是nt ...

最新文章

  1. Kubernates集群入门(1)
  2. 人体姿态估计(Human Pose Estimation)技巧方法汇总
  3. linux下各种连接慢的问题
  4. 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)
  5. 用 SpringBoot,亲自打造一个在线题库系统
  6. HIT Software Construction Review Notes(2-1 Software Lifecycle and Configuration Management)
  7. Promise的10大知识点!
  8. python解释器安装步骤_怎么安装python解释器
  9. 2022-2028全球与中国电池级硫酸锰市场现状及未来发展趋势
  10. 微信支付全流程对接文档
  11. Vue3 小菠萝 Pinia使用
  12. unity 纹理压缩格式‘_游戏制作行业为什么使用TGA格式的贴图而不使用PNG格式?...
  13. 吴恩达深度学习课程完整笔记(DeepLearning.ai)
  14. 边坡裂缝拉绳位移计的原理及怎样进行长期健康监测
  15. 怎么把启用计算机的d磁盘,Win10计算机怎么隐藏磁盘盘符?
  16. 学习编程该如何开始呢?
  17. perl中our的用法
  18. Leetcode 417 题 太平洋大西洋水流问题
  19. 学生考勤系统设计c语言源程序文件的后缀是,C++学生考勤系统(含源代码).doc
  20. Linux(阿里云)Tomcat安装教程

热门文章

  1. 在c语言中通过return语句,c语言中return的用法
  2. mac下html编辑器,【已解决】Mac下好用的支持GBK编码的文本代码编辑器
  3. 优秀的Meteor学习资源
  4. 出版了!智能物流系统构成与技术实践!立库、AGV、装卸、拣选、分拣、WMS……...
  5. 获得淘宝天猫1688app商品详情原数据API
  6. 缓和曲线04四次两段曲线
  7. matlab画服装版,教程·服装设计 | 假装是设计师—学习女装手稿绘制技巧
  8. Qt 之 去除窗口部件被选中后的焦点虚线框
  9. dedecms系统织梦会员登录二级域名不能跨域
  10. win10电脑移动热点连上没网