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

Payara Glassfish Server重部署列目录错误及GC超限问题求助

Payara热部署问题解决方案

1 偶发NoSuchFileException目录不存在报错修复

该报错属于Payara 5.194版本的已知竞态问题:热部署开启keepstate=true时,DirWatcher目录监控线程会尝试访问刚被旧部署流程删除的generated目录,和权限配置无关。
可选择以下任意一种方案修复:

  • 开发环境关闭keepstate选项:部署时指定参数--keepstate=false,或在domain配置文件中修改默认部署参数,每次重部署清空旧状态数据,避免旧目录删除和新目录创建的时序冲突
  • 预创建目标目录:提前手动创建C:\payara5\glassfish\domains\domain1\generated\ejb\javaProject目录,跳过部署时的删除重建逻辑,从根源避免冲突
  • 升级Payara版本:该竞态问题在Payara 5.2020及以上版本已修复,可直接升级小版本解决底层问题

2 GC overhead limit exceeded内存溢出报错修复

该报错是热部署导致的类加载器内存泄漏,每次重部署生成的旧类加载器无法被GC回收,积累到一定阈值就会触发溢出,单纯调大堆内存只会推迟报错时间,无法根治。
修复方案:

  • 开启类卸载和泄漏检测:在domain.xml的jvm-config节点添加以下JVM参数:
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:+CMSClassUnloadingEnabled
-XX:+ExplicitGCInvokesConcurrent
-Dorg.glassfish.deployment.permanentGenerationsCapacity=500
  • 调整自动部署触发逻辑:关闭IDE的实时自动热部署,改为手动触发,或设置自动部署延迟,避免单次修改就触发全量重部署
  • 定期重启开发服务器:日常开发过程中每2-3小时手动重启一次Payara,彻底释放泄漏的类加载器内存,避免问题积累

若不想修改配置,可在每次触发目录不存在报错后,执行一次干净的全量重部署,也能暂时避免后续GC溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:06:02