You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Elastic Beanstalk上Tomcat 9部署的Spring Boot(Grails 3.1)应用触发FileCountLimitExceededException问题排查与解决

AWS Elastic Beanstalk上Tomcat 9部署的Spring Boot(Grails 3.1)应用触发FileCountLimitExceededException问题排查与解决

为什么突然出现这个错误?

首先,你提到没有修改代码或配置就触发了FileCountLimitExceededException,大概率是以下两个原因之一:

  1. AWS Elastic Beanstalk平台静默更新:AWS会定期为EB平台版本推送补丁,你使用的Tomcat 9 with Corretto 8 running on 64bit Amazon Linux 2/4.9.1可能被更新了Tomcat的默认multipart配置——比如原本的fileCountLimit(文件上传数量限制)被调低,或者之前的计数逻辑bug被修复,导致原本不会触发的限制现在生效了。
  2. 请求结构隐性变化:可能你的前端表单新增了多个空的文件输入字段(比如用户没选择文件但表单里有多个<input type="file">),或者近期此类请求的part数量(包括空文件part)超过了Tomcat的默认阈值——注意Tomcat会把空文件part也算入fileCountLimit的计数哦。

解决方法

针对你的Grails 3.1(基于Spring Boot 1.3.7)应用,有两种直接有效的修复方式:

方案1:通过Grails/Spring Boot配置调整(推荐)

在项目的application.yml或application.groovy中添加multipart配置,直接覆盖Tomcat的默认限制:

  • 若使用YAML配置(application.yml):
spring:
  http:
    multipart:
      max-file-size: 10MB          # 单个文件最大大小,按需调整
      max-request-size: 100MB       # 整个请求的最大大小,按需调整
      file-size-threshold: 0        # 超过此大小的文件会写入磁盘,0表示全部在内存处理
      tomcat:
        max-file-count: 200         # 调高文件数量限制,比默认值(100)高即可
  • 若使用Groovy配置(application.groovy):
spring.http.multipart.maxFileSize = '10MB'
spring.http.multipart.maxRequestSize = '100MB'
spring.http.multipart.tomcat.maxFileCount = 200

配置完成后重新部署应用,Spring Boot会自动将这些参数传递给Tomcat的文件上传组件,覆盖默认限制。

方案2:通过Elastic Beanstalk配置文件修改Tomcat全局设置

如果方案1不生效,可以直接修改Tomcat的上下文配置。在项目根目录创建.ebextensions/01-tomcat-multipart.config文件,内容如下:

files:
  "/etc/tomcat9/conf/Catalina/localhost/ROOT.xml":
    mode: "000644"
    owner: root
    group: root
    content: |
      <Context>
        <MultipartConfig
          maxFileSize="10485760"      # 对应10MB,单位为字节
          maxRequestSize="104857600"  # 对应100MB
          fileSizeThreshold="0"
          maxFileCount="200"          # 调整文件数量限制
        />
      </Context>

这个配置会在EB部署过程中自动生成Tomcat的ROOT应用上下文配置,强制覆盖multipart参数。

额外排查步骤

  • 检查EB平台历史:登录AWS控制台,进入你的Elastic Beanstalk环境,查看「平台版本历史」,确认最近是否有平台更新记录,这能帮你明确问题是否由平台变更导致。
  • 分析请求结构:用浏览器开发者工具抓包,查看触发错误的请求的Form Data,统计其中文件类型的part数量,确认是否真的超过了Tomcat默认的fileCountLimit(默认值为100)。
  • 本地复现测试:在本地运行相同版本的应用,模拟生产环境的请求,看是否会触发相同错误,排除生产环境独有的配置差异。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:09:34