linux磁盘空间占用很大,但是找不到大文件
一.背景介绍
在linux系统上部署了tomcat应用,运行一段时间后,发觉根分区空间的占用越来越大,tomcat的日志已经定时清理了,并且在系统中并未找到有占用这么多磁盘空间的文件。
二.问题分析
1.查看磁盘空间使用情况(它会统计碎片占用的磁盘空间):
df -h
2.查看磁盘空间使用情况:
du -sh *
3.查看linux系统中,大于500M的文件:
find / -type f -size +500M
通过以上步骤,可能是由于反复的删除文件导致的磁盘产生碎片,一直没有释放。
4.查看已经删除的文件,磁盘空间没有释放:
lsof -n |grep deleted
执行命令后,发现有大量的状态为deleted背进程号为161886所占用,实际该文件是被删除了。
发现是部署的定时工程的日志,而此工程因为项目中后台日志输出较大,所以通过linux的crontab定时清理日志,而脚本中是执行的rm -rf删除日志,问题到这一步已经可以确定了。因为执行rm -rf删除大文件操作时,如果进程在继续访问该文件,那么可能会导致磁盘空间一直占用不释放。
三.问题解决
将定时清理的脚本中的rm换成:
cd /data/applogs/xxl-job
echo > xxl-job-executor-sample-springboot.log
通过“>”可以直接释放磁盘空间。将应用程序进程关闭重启,先释放。然后后面再持续观察一段时间后,执行lsof -n |grep deleted 并没有之前经常一直占用deleted类型文件发生,磁盘空间使用率也没有一直莫名其妙的增加。