linux磁盘空间莫名占用
故障上报
今天收到某台机器的磁盘告警,用 df
检查发现 /data 可用空间为0,而用 du
检查发现占用的空间都很少,仅占用4.3G,大量空间被莫名占用了。
[root@u-220112-app]# fdisk -l | grep dev
Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Disk /dev/vdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
[root@u-220112-app]# df -Th | grep dev
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 18G 20G 48% /
/dev/vdb1 ext4 40G 40G 0 100% /data
[root@u-220112-app]# du -sh /data | grep G
4.3G /data
初步清理
使用 find
查找该目录超过500M的文件,先做初步的清理
#.查找所有大于500MB的文件
find /data/ -size +500M
#.找到60天以前、大于100MB、后缀为 .log的文件
find /data/ -name "*.log" –mtime +60 -typef -size +100M
#find /data/ -name "*.log" –mtime +60 -typef -size +100M | xargs rm –rf {};
执行 lsof
查找占用该目录空间的进程和文件
lsof +L1 /data/
解决办法
用lsof检查后才发现原因是,某个进程占用的日志文件被删除之后而未重启进程,比如通过 rm -f nohup.out
删除文件而非 echo > nohup.out
重置文件,从而造成空间无法释放。根据lsof列出的进程号,重启可疑进程之后空间就释放出来了。
# yum install -y lsof
lsof | grep delete
lsof +L1 /data | grep delete
kill $pid
注:后面再次遇到同样的问题,根据 lsof | grep delete
返回的结果(如下图示),重启 tomcatGrowthStatistics8083
这个java进程就好了。