工作采坑札记: 4. linux指定目录使用df和du的统计结果相差很大

1. 背景

近日,线上的服务出现异常,调用服务返回的JSON格式数据不完整,导致客户端解析异常,因此记录了本次的填坑之旅(nnd)...

2. 排查过程

2.1 服务器分析

登录到服务所在linux服务器,查看磁盘I/O信息iotop、CPU信息top、网络请求netstat -alnp等一通操作,木有发现相关问题。随执行了df -h查看磁盘占用

发现,系统盘根目录"/"的共计60G的磁盘占用100%,好吧,问题大概率就在这了。随后进入根目录,打算查看哪个文件夹占用最多,删除些文件,减小磁盘占用。

当执行du -hd 1查看每个目录的磁盘占用情况,发现total显示总计3.8G。有点莫名其妙,df显示磁盘占满,而du显示只占用了不到5%

2.2 原因分析

通过上网搜索,原因在于:某些进程异常,输出了一个大文件在/分区,但由于某种原因,该文件删除了,进程却没有退出,则该进程一直在操作该大文件。

因为文件句柄并没有关闭,所以会造成df 显示剩余磁盘空间少,而du并不会

2.3 解决

(1) lsof -n | grep deleted,找到大文件的进程是nginx

(2) 原来是将nginx的日志删除了,但nginx并没有重启,导致日志文件句柄一直存在

(3) 重新加载nginx:nginx -s reload

(4) 再次运行df -h发现磁盘占用率回归正常了,服务也返回正常。

2.4 注意

一般当根目录磁盘分配空间较小时,不要将服务日志、数据库索引文件等大文件放在根目录所在磁盘,而应该放置在另一块更大的磁盘之上,且定期需要备份和更新。

3. 参考

(1) https://blog.csdn.net/weixin_33743661/article/details/85985077

(2) https://www.cnblogs.com/softidea/p/4237084.html

原文地址:https://www.cnblogs.com/mengrennwpu/p/11101647.html