CentOS上调试Java程序崩溃可按以下步骤进行:
- 查看错误日志
- 分析
hs_err_pidxxx.log(JVM崩溃时生成,含崩溃原因、线程栈等信息)。 - 检查系统日志(
/var/log/messages、journalctl),排查是否因内存不足(OOM)被系统杀死。
- 分析
- 分析堆转储文件
- 通过
jmap生成堆转储文件(需在JVM参数中添加-XX:+HeapDumpOnOutOfMemoryError),用Eclipse MAT等工具分析内存泄漏。
- 通过
- 监控系统资源
- 使用
top、free、df查看CPU、内存、磁盘使用情况,确认是否资源不足。 - 用
jstat监控GC状态,分析是否存在频繁Full GC或内存回收异常。
- 使用
- 检查环境配置
- 确认
JAVA_HOME、PATH正确,Java版本与程序兼容。 - 检查依赖库是否完整、版本冲突,可通过
-classpath参数指定类路径。
- 确认
- 使用调试工具
- 用
jstack生成线程转储,分析死锁、阻塞等问题。 - 借助Arthas、JProfiler等工具进行在线诊断,查看类加载、方法调用等详细信息。
- 用
- 排查代码与JVM参数
- 审查代码中可能的内存泄漏、空指针等问题,确保资源(如文件句柄、数据库连接)正确释放。
- 调整JVM参数(如
-Xmx、-Xms、垃圾回收策略),避免配置不当导致崩溃。
关键工具:jstack(线程分析)、jmap(堆转储)、jstat(GC监控)、Eclipse MAT(内存分析)。
参考来源: