You need to enable JavaScript to run this app. Spring Boot Multipart上传部署AWS EC2报No space left on device错误
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Multipart上传部署AWS EC2报No space left on device错误

Failed to parse multipart servlet request; nested exception is org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. No space left on device

错误根因分析

该报错本质是Spring Boot内置Tomcat处理multipart/form-data请求时,需要先将上传的文件写入本地临时目录缓存,写入时触发了系统级的空间不足错误,仅核查磁盘分区容量使用率无法覆盖以下几个常见触发场景:

  • inode资源耗尽:系统存储小文件过多时,会耗尽磁盘的inode索引资源,即使磁盘剩余容量充足,也无法创建新文件,触发空间不足报错。
  • 临时目录为tmpfs内存挂载:部分AWS EC2默认AMI会将/tmp目录挂载为tmpfs类型的内存虚拟磁盘,容量上限通常为实例内存的50%,如果上传的文件大小超过tmpfs剩余容量,就会触发报错,该分区的容量占用不会被常规磁盘使用率统计覆盖。
  • Spring Boot临时文件配置问题:默认的multipart临时存储路径权限不足,或者历史临时文件未被服务自动清理,占满了对应路径的容量。
修复方案
  • 首先执行df -i核查inode使用率,如果对应分区使用率为100%,清理/tmp目录下的陈旧临时文件、删除系统中无用的零散小文件即可恢复。
  • 执行df -h /tmp确认临时目录挂载类型,如果为tmpfs,可直接修改Spring Boot配置,自定义multipart临时存储路径到磁盘分区的可读写目录,在application配置中添加:
    spring.servlet.multipart.location=/opt/your-app/temp
    
    配置完成后给对应目录分配应用运行账号的读写权限即可。
  • 优化S3上传逻辑:无需将上传文件缓存到本地,直接读取MultipartFile的输入流传给AWS S3 SDK的上传接口,彻底规避本地临时文件存储的依赖,示例代码逻辑:
    public void uploadFileToS3(String bucket, String key, MultipartFile file) throws IOException {
        s3Client.putObject(PutObjectRequest.builder()
                        .bucket(bucket)
                        .key(key)
                        .build(),
                RequestBody.fromInputStream(file.getInputStream(), file.getSize()));
    }
    
  • 可根据业务上传文件大小调整阈值配置,设置小于阈值的文件直接缓存在内存中,减少磁盘写入:
    # 单位为MB,示例设置小于10MB的文件直接走内存缓存
    spring.servlet.multipart.file-size-threshold=10MB
    

内容的提问来源于stack exchange,提问作者Rajesh Iyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 17:15:01