您的位置:首页 > 其它

lsof解决磁盘占用过高,查询却无大文件处理一例!

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

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

  于是做如下操作,发现了真正占用空间的文件:
1、首先执行,发现如下图所示的占用文件:
lsof  | grep '(deleted)'





2、把占用文件的进程杀掉;
kill -9 31753


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




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

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

参考文章:http://blog.csdn.net/scythe666/article/details/52020934 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lsof 磁盘 占用 过高