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

启动Grails 3.3.9应用时遭遇Unable to start embedded Tomcat异常

问题分析与修复方案

核心问题定位

多次触发OutOfMemoryError: GC overhead limit exceeded后,Ehcache的磁盘缓存文件大概率已损坏,导致重启时reportCache初始化失败,进而触发Spring Bean依赖链创建异常,最终引发Unable to start embedded Tomcat错误。

具体修复步骤

  • 清理Ehcache磁盘缓存
    Grails 3.3.9中Ehcache默认磁盘缓存路径通常为build/tmp/ehcache或用户主目录下的~/.grails/ehcache,直接删除对应目录下的全部文件,重点清除reportCache相关缓存文件。
  • 调整JVM内存参数
    针对之前的内存溢出问题,修改启动参数增大堆内存与元空间:
    export JAVA_OPTS="-Xms2g -Xmx4g -XX:MaxMetaspaceSize=512m"
    
    若使用IDEA启动,可在Run Configuration中直接添加上述参数,避免再次触发GC过载。
  • 检查Ehcache配置合理性
    打开grails-app/conf/ehcache.xml或application.yml,确认reportCache的配置项是否存在磁盘存储上限过小等问题:

    示例配置检查点:

    <cache name="reportCache"
           maxEntriesLocalHeap="10000"
           maxEntriesLocalDisk="1000000"
           diskExpiryThreadIntervalSeconds="3600"
           memoryStoreEvictionPolicy="LRU">
    </cache>
    
    确保maxEntriesLocalDisk数值及缓存目录所在磁盘有足够剩余空间。
  • 彻底清理项目构建缓存
    执行Grails清理命令清除旧构建缓存:
    ./grailsw clean
    ./grailsw compile
    

验证流程

  1. 完成上述操作后重新启动应用;
  2. 观察启动日志,确认reportCache初始化成功、Tomcat正常启动;
  3. 测试大计算场景,验证内存参数是否能支撑业务需求,避免再次出现OOM。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:02