最近公司在整理网关项目(没有使用spring 全家桶),为了整合其他项目,想要整合nacos进行服务注册与发现,并通过LB方式进行服务之间的调用。但是在上线后,运行了一会之后,发现机器在jps查看进程的时候,格外的慢。而且发生了磁盘报警。通过排查发现机器的/tmp目录下生成了N多个文件夹。于是首先进行项目回滚,删除无用的文件夹。在通过测试环境进行问题追究和解决。
发现文件夹生成的速度与请求量成正比,一个请求一个文件夹。(而我们线上已经成百万的文件夹了)。通过查看spring官网已经GitHub发现原来是Spring-web中,5.2.15.RELEASE版本出现的问题所在。
如图所示:
类中有一个创建临时文件的方法存在,导致了每当有一个请求,就会创建一个临时文件。从而引发报警。
解决:
可以先在pom文件中,单独升级依赖的版本
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.16.RELEASE</version>
</dependency>
也可以进行整体版本升级
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
<spring-boot.version>2.6.3</spring-boot.version>
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- spring cloud alibaba 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
小记:考虑使用最新版本,但是因为存在nacos相关引入,一些引入会产生冲突,如果解决,会更新此文档。(2022年06月20日10:14:43 已修改)