最近線上 elasticsearch 由於磁盤空間不足報錯,於是乎對磁盤進行了分析,刪除了一些 Tomcat 日志文件,但是刪除后發現並沒有磁盤空間釋放。於是 google 了一下。
原來在Linux或者Unix系統中,通過rm或者文件管理器刪除文件將會從文件系統的目錄結構上解除鏈接(unlink),然而如果文件是被打開的(有一個進程正在使用),那么進程將仍然可以讀取該文件,磁盤空間也一直被占用。而我刪除的是正在運行中的 Tomcat 的 logs,刪除的時候文件正在被使用中。
Linux 使用 lsof | grep deleted
命令獲得一個已經被刪除但是仍然被應用程序占用的文件列表,kill 掉相關進程即可強制要求系統回收分配給正在使用的的文件。或者也可以將文件占用取消,比如當前場景可以讓 Tomcat 關閉即可取消文件占用。
(lsof
全名 list opened files
,也就是列舉系統中已經被打開的文件。)
在網上還看到了一種方法,使用 echo " " > logs/xxx.log
通過這種方法,磁盤空間不但可以馬上釋放,也可保障進程繼續向文件寫入日志,這種方法用於在線清理 Apache
、Tomcat
、Nginx
等 Web
服務產生的日志文件相當實用。
本文由個人 hexo 博客 co2fe.com 遷移
date: 2018-11-21 16:53:29