文件空洞:文件内容的大小小于文件磁盘占用的空间 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
命令把日志文件清空