我在linux上有一个spring引导应用程序,它使用logback写入服务日志。logback设置为写入一个文件(account service.log)并以10.5MB的速度旋转该文件,最后在第8次旋转时删除该文件。这是默认配置。
我遇到的问题是创建的第一个日志文件被写入超过10.5MB大小限制(它确实在10.5MB标记处旋转)。所以它的大小在增加,直到它成为第8个文件,然后它试图被删除。此时文件大小为84MB(10.5MB*8)。You can see here the file increasing in size
这方面的主要问题是操作系统试图删除文件,但是由于应用程序由于logback的原因仍然保持打开状态,因此文件系统不会显示删除的文件(如使用命令find或du),并且系统仍然保留磁盘上分配的空间。此外,文件仍被写入,因此占用了越来越多的磁盘空间。我运行了sudo lsof grep deleted,发现这个文件没有被完全删除。
同样有趣的是,第一个文件所属的组与其他组不同。第一个文件具有组根,其余文件具有正确的帐户服务组名。这可能是应用程序无法关闭文件的原因,但我不确定。
logback依赖项来自我的spring boot pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
后续的日志文件确实会被删除,并且不会被写入超过10.5 MB的限制。
有人看到这个问题或找到解决它的方法吗?
最佳答案
正如您所提到的,文件是根用户访问权限,看起来不正确。您可以通过执行ps-efw grep applicationname来检查应用程序,以查看它具有哪些用户权限,因为您的应用程序只应具有应用程序用户权限。