快手二面,磁盘异常爆满如何排查?

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍

  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;

  • 专栏阅读地址:https://www.quanxiaoha.com/column

截止目前,累计输出 85w+ 字,讲解图 3088+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有3000+小伙伴加入

图片

大家比较常见的情况应该是内存或者 CPU 的告警,磁盘相对来说不那么容易出问题,毕竟大部分应用都不需要和磁盘交互,磁盘告警的示例如下:

一般遇到磁盘爆满的告警,第一步要做的就是确认告警信息是否正确,登录服务器,通过 df -Hl 查看:

可以看到 /dev/vda1 占据了 43G 的内存,和告警信息一致,接着我们就是要找到导致磁盘空间满的具体目录或文件

如何定位占用大量磁盘空间的目录或文件?

一种基础的做法是,在根目录下执行du -hs命令,列出各个目录的大小。

为了进一步细化,可以进入具体的目录重复该操作。这种方法虽然简单,但不够高效。

更优的方法是使用du命令的-d参数(或--max-depth参数),设置目录扫描的深度。扫描深度越大,输出的结果会越多,此时可以通过grep过滤不必要的信息。

du -h -d 2 | grep [GT] | sort -nr  
du -h --max-depth=2 | grep [GT] | sort -nr

这种方式可以快速筛选出以G或T为单位的大目录,并按大小排序。

另一种更高效的方法是使用find命令:

find / -type f -size +1G -exec du -h {} \;

相较于dufind更加灵活和快速。通过这两种方式,可以迅速定位占用磁盘空间的文件或目录。

磁盘空间不一致的情况

然而,事情并不总是这么简单。有时你可能会发现,使用finddu查找到的文件占用空间与df命令显示的磁盘使用量相差甚远。比如上图我们使用du -hs查看根目录下所有文件的总和就只有10G左右,但 df显示磁盘占用了37G,没有隐藏目录的情况下,剩余的空间去了哪里?

这种现象通常是由被删除的文件占用空间但未释放资源导致的。虽然文件被删除了,但系统还没有真正释放其占用的空间。

此时,我们可以使用lsof命令来检查是否有未完全释放的文件:

lsof +L1

从上图结果中可以看到,有一个被删除但仍占用约28G空间的日志文件。这是比较常见的情况。解决方法是重启相关应用(如Tomcat),以释放这些被占用的空间。

磁盘空间被系统保留

有时候,你可能还会发现df命令显示的Used和Available空间之和小于Total大小,似乎有部分空间"消失"了。

这实际上是Linux文件系统的安全机制。默认情况下,系统会为root用户预留5%的磁盘空间,用于紧急情况。这样可以确保关键应用(如数据库)在磁盘满时仍有少量空间,避免崩溃。

如果需要释放这部分保留空间,可以使用tune2fs命令调整预留空间的比例:

tune2fs -m 1 /dev/vda1

上述命令执行后将只保留 1G 的安全空间:

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍

  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;

  • 专栏阅读地址:https://www.quanxiaoha.com/column

截止目前,累计输出 85w+ 字,讲解图 3088+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有3000+小伙伴加入

图片

图片

图片

1. 我的私密学习小圈子,从0到1手撸企业实战项目~
2. 几款实用的内网穿透工具,安排!
3. 网易二面:阿里为何建议MVC+Manager层混合架构?
4. 如何画出一张优秀的架构图(老鸟必备)
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
点“在看”支持小哈呀,谢谢啦
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值