文件空洞:文件內容的大小小於文件磁盤佔用的空間 java
產生緣由:如java使用 nohup java -jar xxx.jar > log.txt
方式啓動java程序,但隨着日誌內容的增多,服務器磁盤空間不足,須要清理日誌文件,因此可採用命令 echo '' > log.txt
此時日誌文件內容被清空(注意,若是隻是經過重命名或刪除或vim編輯日誌文件的方式清除文件內容時,因爲程序沒有中止,這樣會致使輸出的日誌文件的fd仍是指向原來文件,那麼新添加的日誌內容將無法寫到日誌文件中去),經過命令 ll log.txt
發現文件磁盤佔用空間變小了,由原來的幾G變到幾b,而後過幾秒後有新的日誌內容輸入時,文件磁盤空間忽然變到原來的幾G,這就是所謂的文件空洞的具體表現。打開日誌文件發現內容清空,但實際上寫入的位置沒有重置到文件起始位置,爲覆蓋寫;所以從新寫放時都以null值佔用,解決方法就是日誌輸出改爲追加寫 nohup java -jar xxx.jar >> log.txt
這樣在清空文件時,寫入位置置零,追加寫入會從起始位置開始寫入,不會產生文件空洞,固然清空日誌文件內容時,若是日誌文件重要,謹記先備份再清空。 vim
清空日誌文件不產生文件空洞的正確作法就是服務器
nohup java -jar xxx.jar > log.txt
,固然不指定日誌文件名,nohup默認就是追加到nohup.out中去echo '' > log.txt
命令把日誌文件清空