[Spring/SpringWeb] spring-cloud-gateway|spring-web|ynchronossPartHttpMessageReader 应用程序在/tmp/文件夹下生成海量的以"synchronoss-file-upload"开头的空文件夹,导致磁盘inode索引耗尽、报“No space left on device”
1 问题描述
- 环境信息
- spring-cloud-gateway : 2.2.9.RELEASE
- spring-boot : 2.3.12.RELEASE
- spring : 5.2.15.RELEASE
- java : 1.8
- deploy on k8s
- 调用方微服务的异常日志
打印了被调用方(
Spring-Cloud-Gateway:2.2.9.RELEASE)的完整响应信息

Caused by: feign.FeignException$InternalServerError: [500 Internal Server Error] during [POST] to [ http://Xxxx-gateway-parent-backend-service.namespace:80/xxxx/api/xxxxxxxxx/v1.0?nonce×tamp=174xxxx948560&appKey&sign] [XxxxApi#getYyyy(JSONObject,String,Long,String,String)]: [{"timestamp":174xxxx948568,"path":"/xxxx/api/xxxxxxxxx/v1.0","status":500,"error":"Internal Server Error","message":"","requestId":"3f60ad19-7924209"}]
- 调用方

[TID: N/A] [Xxxx-gateway] [system] [2025/04/18 18:42:29.594] [ERROR] [boundedElastic-94818] [CompositeLog] error:122 |N/A| [3f60ad19-7924214] 500 Server Error for HTTP POST "/xxx/api/xxxxxxx/v1.0?nonce×tamp=174xxxx949580&appKey&sign"
java.io.UncheckedIOException: java.nio.file.FileSystemException: /tmp/synchronoss-file-upload-4247860018208359052: No space left on device
2 问题分析
磁盘占用情况
- 网关 Pod 所在物理节点的磁盘:未满

- 网关 Pod 索引节点的消耗情况:
环境中 4 个 Pod 容器 都是 100% 或 99%

说明:不是磁盘空间不足,而是小文件太多或者空目录太多。
- 进一步查看/tmp/synchronoss-file-upload-*这类目录,结果均为空目录
# ls -la /tmp/synchronoss-file-upload-4247860018208359052
..
.
源代码
spring-web:5.2.15.RELEASE (问题所在)
- spring-web:- org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader

- org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader#read

结论
- 
spring-cloud-gateway的底层组件spring-web:5.2.15.RELEASE有 bug: 针对每次用户的HTTP请求都会创建一个空目录
- 
其导致了 dockerpod 容器的操作系统inode索引【完全耗尽】的异常(No space left on device)。
- 
但 spring-web:5.2.16.RELEASE做了优化————不再是每个请求都生成空目录了。

3 解决方法
- 
1)临时方法:重新部署微服务 
- 
2)永久方法: 更新源码 spring-web 组件的版本 
- a. 升级 spring-web 组件至 5.2.16.RELEASE
spring-web / spring-webmvc / spring-webflux
- b. 整体升级 spring-cloud 2.2.9.RELEASE 至
spring-cloud3.x (此大版本将不再使用该问题组件)
Y 推荐文献
- spring-frmework
- https://github.com/spring-projects/spring-framework/blob/v5.2.15.RELEASE/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java
- https://github.com/spring-projects/spring-framework/blob/v5.2.16.RELEASE/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java
Linux 操作系统 inode 索引完全耗尽的异常(
No space left on device)
df -i /
X 参考文献
 
    
    本文作者:
        千千寰宇
    
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号