linux清空程序日志文件无法清空并产生乱码

当我将自己服务器上运行的java程序进行日志切割的时候,发现无法清空原日志文件,执行清空命令后,日志文件不会减小并且会产生乱码。经过查找资料,得知原来是产生了文件空洞。

文件空洞:文件内容的大小小于文件磁盘占用的空间

如果服务器上java程序使用:
nohup java -jar demo.jar > log.txt 2>&1 &
方式启动java程序,随着日志内容的增多,需要清理日志文件,如果只是经过重命名或删除或vim编辑日志文件的方式清除文件内容时,因为java程序没有中止,这样会致使输出的日志文件的fd仍是指向原来文件,那么新添加的日志内容将无法写到日志文件中去。

若采用命令:
echo "" > log.txt
此时日志文件内容被清空,通过命令:
ll log.txt
发现文件磁盘占用空间变小了,由原来的几G变到几b,而后过几秒后有新的日志内容输入时,文件磁盘空间忽然变到原来的几G,这就是所谓的文件空洞的具体表现。打开日志文件发现内容清空,但实际上写入的位置没有重置到文件起始位置,为覆盖写;所以从新写放时都以null值占用。

解决方法:将日志输出改为追加写
nohup java -jar demo.jar >> log.txt 2>&1 &
这样在清空文件时,写入位置置零,追加写入会从起始位置开始写入,不会产生文件空洞。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值