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

Java EE中GlassFish突然重启问题求助,附日志写入EOFException解决过程

求助:GlassFish服务器突然重启异常的解决方法

先跟大家说下我的背景:我正在学习Java EE,为了实现类与方法访问日志本地写入的功能,一开始用Files.write的时候碰到了EOFException,后来换成BufferedWriter就解决了,当时的核心代码大概是这样的:

private void writeLogToFile(String text, File file) throws IOException { 
    BufferedWriter output = null; 
    output = new BufferedWriter(new FileWriter(file, true));
    output.write(text);
    output.newLine();
    output.close();
}

现在我遇到了一个棘手的问题:GlassFish服务器会毫无征兆地突然重启,想请教各位大佬有没有排查和解决的思路?

可能的排查方向与解决建议

  • 优先查看服务器日志:首先去GlassFish的默认日志目录 glassfish/domains/[你的域名]/logs 打开server.log,这里会记录重启前的所有异常信息,比如内存溢出、线程死锁、应用部署错误等,这是定位问题最直接的入口。
  • 排查JVM内存不足问题:GlassFish突然重启大概率和OOM(OutOfMemoryError)有关。可以调整JVM堆内存参数,找到domain.xml里的jvm-options节点,修改或添加:
    <jvm-options>-Xms512m</jvm-options> <!-- 初始堆内存 -->
    <jvm-options>-Xmx1024m</jvm-options> <!-- 最大堆内存 -->
    
    同时开启内存溢出日志,方便后续分析:
    <jvm-options>-XX:+HeapDumpOnOutOfMemoryError</jvm-options>
    <jvm-options>-XX:HeapDumpPath=${com.sun.aas.instanceRoot}/logs/heapdump.hprof</jvm-options>
    
  • 检查代码资源泄漏:虽然你用了BufferedWriter.close(),但建议改用try-with-resources语法确保资源自动释放,避免因资源泄漏导致服务器资源耗尽:
    private void writeLogToFile(String text, File file) throws IOException { 
        try (BufferedWriter output = new BufferedWriter(new FileWriter(file, true))) {
            output.write(text);
            output.newLine();
        }
    }
    
  • 排查应用部署问题:如果最近部署了新应用或者更新了现有应用,可能是应用内存在未捕获的异常(比如Servlet初始化失败、过滤器报错)导致服务器崩溃。可以暂时移除可疑应用,观察服务器是否还会重启。
  • 检查系统层面资源:看看服务器所在的操作系统有没有资源瓶颈,比如CPU使用率长期过高、磁盘空间不足,或者Linux下的OOM Killer进程杀死了GlassFish。可以用top、df -h等命令监控系统状态。
  • 考虑GlassFish版本bug:如果使用的是较旧的GlassFish版本,可能存在已知的重启相关bug,可以尝试升级到最新稳定版,或者查看官方文档确认是否有对应问题的修复方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:29