最近,我在系统开发过程中遇到了一个问题,就是磁盘空间被沾满
用df -lh
命令查看
起初,我认为应该是log日志太多,所以,清理掉了我能想到的log日志的地方,清理后大概腾出了1G多的空间,勉强能用一段时间
但是,很快磁盘再次100%,于是我就想删除更多的log日志,于是我就想到用find语句,步骤如下:
- 使用root权限
cd /
进入根目录 - 使用命令
find -type f -size +100M -name "*.log" |xargs ls -l
来查询所有大小超过100M且以.log结尾的文件,并显示其大小
一顿操作下来,仅有几个不超过200M的文件,还是别的项目组的日志文件,不敢轻易删去;于是我改进了一下,
- 用命令
find -type f -size +100M -name "*.*" |xargs ls -l
查询所有超过100M的文件如下:
但,这几个文件之和也远远没有达到想象中的大小
实在每招,我们就看下是哪个文件夹占这么大的面积,
- 用命令
du -s -h ./*
如下:
发现,所有文件夹大小总和才不到20G,而我们磁盘的大小又40多G,其他空间去哪了呢
于是我们想,会不会是又隐藏文件呢
- 于是用命令
du -sh .[!.]* * | sort -hr
来查看所有跟目录下文件及文件夹大小,包括隐藏文件
也还是总共不到20G的空间占有
到底是什么情况呢???
这时,我们发现一种情况,就是每当我们清楚掉几十兆的空间后,没过多久,空间就又被占满了,网上查询相关的内容,有一种说法,是说文件被删除了,但是进程依然在读写被删除的文件,造成磁盘空间没有被释放
- 于是我用命令
**lsof -n | grep deleted**
果然发现了很多进程占有被删除的文件
其中,有的进程占领的空间达20多G,所以情况都清楚了,但是这个进程是另外一个项目组的,我让他们将该服务停掉,然后, - 使用
kill -9 进程号
来杀死该进程
最后,再看看系统磁盘情况df -lh
果然,空间清理出了24G!!!