文件空洞:文件内容的大小小于文件磁盘占用的空间
产生原因:如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
这样在清空文件时,写入位置置零,追加写入会从起始位置开始写入,不会产生文件空洞,当然清空日志文件内容时,如果日志文件重要,谨记先备份再清空。
清空日志文件不产生文件空洞的正确做法就是
- 启动程序时指定内容输出到日志文件中是以追加方式输出
nohup java -jar xxx.jar > log.txt
,当然不指定日志文件名,nohup默认就是追加到nohup.out中去 - 使用
echo '' > log.txt
命令把日志文件清空
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。