在 Windows 中诊断崩溃
通常,您会将崩溃视为 Java™ 抛出的不可恢复异常,或者视为通知您发生一般保护故障 (GPF) 的弹出窗口。 弹出窗口通常将 java.exe 引用为导致崩溃的应用程序。 由于 Java 运行时中的故障或由于在 Java 进程中运行的本机 (JNI) 代码中的故障,可能会发生崩溃。
尝试确定应用程序具有任何 JNI 代码,还是使用任何采用 JNI 代码的第三方包(例如,JDBC 应用程序驱动程序)。 如果不是这种情况,那么故障一定在运行时环境中。
尝试在依赖性最小的情况下重现崩溃(在 JVM 选项、JNI 应用程序或概要分析工具方面)。
在崩溃情况下,请为 IBM® Java 服务团队收集尽可能多的数据。 您应该:
- 收集 Javadump。 请参阅 J9 VM 参考 中的 使用 Javadumps 以获取详细信息。
- 收集核心转储。 请参阅 设置和检查 Windows 环境 以获取详细信息。
- 收集 snap 跟踪文件。 请参阅 J9 VM 参考 中的 跟踪 Java 应用程序 以获取详细信息。
- 在关闭 JIT 的情况下运行。 有关详细信息,请参阅 J9 VM 参考 中的 诊断 JIT 或 AOT 问题 。 如果在关闭 JIT 时问题消失,那么尝试部分 JIT 编译选项以查看是否可以进一步缩小问题范围。
- 尝试调整垃圾回收参数。 有关详细信息,请参阅 J9 VM 参考 中的 内存管理 。 请记录任何行为更改。
- 如果在多处理器系统上发生问题,请在单处理器系统上测试您的应用程序。 您可以使用 SMP 机器上的 BIOS 选项将处理器亲缘关系重置为 1,使其行为类似于单处理器。 如果问题消失,请在错误报告中注明。 否则,收集崩溃转储。