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
相关产品推荐
相关产品推荐

