巡檢發現一個服務器佔用到了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