SpringCloudGateway网关项目容器环境下部署出现大量以synchronoss-file-upload开头命名的空文件夹导致磁盘容量慢慢升高而导致项目重启问题解决
写在前面
最近负责运维的同事反馈说,之前在K8s容器环境下部署的SpringCloudGateway项目对应的磁盘容量会慢慢升高,当磁盘容量达到容器设置的最大容量之后,容器中此项目对应的pod节点就会重启,至于具体原因他们也没有查到,不过他们说,在项目对应的临时存储文件的tmp文件夹下发现了很多以synchronoss-file-upload开头命名的空文件,由于这种情况时不时的出现,所以他们建议我看一下是不是程序问题,催促我解决下。
当前SpringCloudGateway项目对应的版本信息如下:
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
1、Bug复现
接到通知之后,我查看了一下测试环境K8s容器下部署的SpringCloudGateway项目,在Linux环境下,先执行一下 top 命令,查看了当前pod节点,SpringCloudGateway项目所占用的容量,发现当前pod节点程序所占用容量与当前系统显示的容量不一致,而且根据运维同事的描述,随即查看了一下根目录的tmp文件夹,果然发现了大量以synchronoss-file-upload开头命名的空文件夹,如下图所示。
2、问题追溯
看到这些空文件,自己也是很懵,SpringCloudGateway项目中并没有文件上传相关的程序,但是虽然没有,自己还是在 IntelliJ IDEA 中全局搜索了一下synchronoss-file-upload关键字,结果发现项目中并没有搜索到,然后又尝试搜索了一下 synchronoss 关键字,发现在 spring-web-5.2.15.RELEASE项目中的SynchronossPartHttpMessageReader类中定义了synchronoss-file-upload关键字,如下图所示。
关于这个方法,我查看了Spring源码的Issue,发现也有人遇见过类似问题,如下所示。
关于此Issue对应的github地址如下:https://github.com/spring-projects/spring-framework/issues/27092
所以,这也就导致当程序发出一个请求之后,Spring-Web项目就会在tmp文件夹下临时创建一个以synchronoss-file-upload开头命名的空文件夹。
3、问题解决
由于是spring-web-5.2.15.RELEASE版本中出现了此问题,所以后续如果有小伙伴使用此版本,请留意网关是否出现类似问题。既然已经查明问题,所以为了解决此问题,继续查看了Spring官网的版本信息,发现在spring-web-5.2.16.RELEASE版本中,针对此问题进行了修复,具体信息如下图所示:
由于官方针对问题已经进行修复,于是在SpringCloudGateway项目中,单独升级了 Spring-Web依赖的版本信息,依赖信息如下,然后重新部署项目,在测试环境K8S容器下,查看pod节点的磁盘占用情况,使用 top 命令发现,磁盘使用情况保持一致,然后同步更新部署线上环境,后续持续观察了一段时间再没有出现类似问题。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.16.RELEASE</version>
</dependency>