51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

java -jar 输出日志后, 太大,删除文件 , 没有释放

如果先通过rm -f命令删除了日志文件,则需要kill掉进程才能是否空间,否则虽然文件被删除了但空间未被释放,此时可以通过lsof|grep deleted 命令查看删除的文件

之所以在出现删除日志文件后,空间还没释放,就是因为使用日志文件的进程还在一直向这个文件写入内容,导致虽然删除了ac日志文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未删除,因此通过df命令查询空间并未释放。

原理:

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中。在将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,

通过df -h发现挂载点对应的分区空间被占满,但是通过du -sh发现分区实际使用的空间大小与df -h中已用的空间大小不一致。

查询结果我们可以看到,已经删除的java日志文件占用了很大的空间。

解决办法:

如果我们用echo " " > /logpath/201109.log这样的命令来清空日志,就不会出现上面这样的问题了。

(1)关闭进程才能释放空间

lsof /home | grep -i delete 

我是关闭进城 后 空间仍然没释放, 后来又重启Java -jar 问题解决:

不需要关闭使用日志的进程即可释放空间的办法

注意: 有可能需要多执行几次如下任一命令,才能生效


赞(7)
未经允许不得转载:工具盒子 » java -jar 输出日志后, 太大,删除文件 , 没有释放