巡检发现一个服务器占用到了96%,使用“find / -type f -size +1024M”查询了一下只有一个19G的文件比较大,而且500G的硬盘,3个多小时没有执行完这个命令。于是搜索半天,发现了一个可能很多人都会知道,但会忽视的问题就是(以下为原文摘抄):


  “就是在Linux的文件系统中删除一个文件,系统并不会真的立刻把这个文件丢弃掉,而只是把它从文件的目录系统中移除, 只有确保所有使用这个文件的程序全部都退出后,才会真的把文件彻底删除掉。”


    于是做如下操作,发现了真正占用空间的文件:

1、首先执行,发现如下图所示的占用文件:

lsof  | grep '(deleted)'

wKioL1itcs2igHcrAABqWQMW8iY422.jpg-wh_50

2、把占用文件的进程杀掉;

kill -9 31753


3、由于这个是jboss的服务,所以杀掉进程后重启了jboss服务,然后在看占用就正常了,万恶的logo挡住了,之前是96%,重启进程后降到了46%。

wKiom1itcs7C32pjAABf3kWzrr8624.jpg-wh_50

总结:

  其实总结过程不难看出,这应该是之前删除/tmp下jar文件的同事忽略了这个文件是被进程占用的情况,删除了文件没有重启进程所导致的。在linux系统中删除积累性文件时可以使用lsof命令查看一下文件是否有被进程占用,在进行删除和相关删除后的操作,避免这种问题的产生。


延伸:

  根据搜索到的参考文章,du -h -x --max-depth=1命令可以查看到那个目录占用的空间较大。命令中-x参数会让命令不统计不在同一个磁盘分区上目录,或换句话说,忽略其他的磁盘挂载点。


参考文章:http://blog.csdn.net/scythe666/article/details/52020934