磁盘满了,为啥du却显示还有很大空间?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 今天有个实习生问了我一个诡异的问题,“线下一台磁盘大小32G的开发机(虚拟机)打不出日志”,把追查过程和大家分享一下。

今天有个实习生问了我一个诡异的问题,“线下一台磁盘大小32G的开发机(虚拟机)打不出日志”,把追查过程和大家分享一下。

画外音:贵司开发机磁盘容量多大?

先du一下,查看磁盘空间:

[shenjian@dev02 ~]# du -sch /
16G     /

画外音:似乎还有空间。

再试了一下df,发现结果不一样:

[shenjian@dev02 ~]$ df -h
文件系统        容量  已用 可用 已用%  挂载点
/dev/sda2      33G   33G   33G  100% /
/dev/sda1      965M   30M  886M   4% /boot

画外音:显示32G都用完了。

du:disk usage

通过搜索文件来计算每个文件的大小然后累加得到的值。

df:disk free

通过文件系统来获取空间大小的信息。

如果用户删除了一个正在运行的应用程序所打开的某个目录下的文件:

du命令返回的值,显示出减去了该文件后的总大小

df命令返回的值,则不显示减去该文件后的大小(文件句柄还在被使用),直到该运行的应用程序关闭了这个打开的文件(才会真正释放空间)

常见的场景是,删除了一个很大的正在写入的tomcat的access日志,du显示的结果会把日志大小减去,而df则仍会包含该日志的大小(实际上tomcat仍引用了该文件的句柄)。

对我们的启示是,如果要删除某个access日志,不要粗暴的rm,而要温柔的:

echo "" > access.log

画外音:朋友们,有没有rm过仍被引用的日志?

如何发现被应用程序引用着“已删除”文件呢?

lsof:list open files

使用lsof查看打开的文件。

lsof | grep deleted

image.png

结果显示,一个我的logsvr程序(跑了几个月了),和实习生写的web-server程序(实习大作业)呈现deleted状态,值得怀疑。

画外音:请在手机上把图放大。

最终定位出,是web-server程序中的一个:

while(pid=fork())

手误写成了:

while(pid==fork())

导致while内一直fork进程,直到将系统资源吃干。并且该进程已经成了zombie进程,无法kill掉,重启开发虚拟机后,问题得到解决。

画外音:我去,多了一个等号,这个bug好真实。

一分钟不长,希望大家有收获:

du:disk usage

df:disk free

lsof:list open files

echo "" > access.log

架构师之路-分享可落地的技术文章

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
Linux
linux(二十八)磁盘管理类命令df、du和free查看磁盘和目录空间占用
linux(二十八)磁盘管理类命令df、du和free查看磁盘和目录空间占用
138 0
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
3月前
|
监控 Linux
在Linux中,如何检查磁盘使用情况和剩余空间?
在Linux中,如何检查磁盘使用情况和剩余空间?
|
6月前
将休眠镜像文件hiberfil.sys移动到D盘,可以减少C盘好几个G的空间占用
将休眠镜像文件hiberfil.sys移动到D盘,可以减少C盘好几个G的空间占用
重复文件清除工具,硬盘内存拯救者。。。
重复文件清除工具,硬盘内存拯救者。。。
|
存储
磁盘满的本质分析——磁盘空间满与inode节点满
磁盘满的本质分析——磁盘空间满与inode节点满
225 1
磁盘满的本质分析——磁盘空间满与inode节点满
|
运维 Java Shell
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
373 0
记一次df -Th与du -sh空间大小不一致磁盘爆满问题的处理过程
|
Shell Linux 存储
磁盘格式化/磁盘挂载/手动增加swap空间
  4.5/4.6 磁盘格式化  4.7/4.8 磁盘挂载 4.9 手动增加swap空间     磁盘格式化  查看centos7支持的文件系统格式 cat  /etc/filesystem,centos7默认的文件系统格式xfs     ce...
1558 0