【发布时间】:2011-02-13 13:58:44
【问题描述】:
我有一个通过 JNI 从 Java 调用的 C++ 库。 C++ 代码中有一个错误,有时会导致 JVM 崩溃。为了对此类崩溃保持稳健,我将 Java 程序包装在一个 shell 脚本中,该脚本在退出时重新启动 java。大多数情况下这是可行的,但有时 JVM 会崩溃(将本机堆栈跟踪打印到 stderr,无法再由 java 调试器附加,停止消耗任何可观的 CPU 时间)但不会退出,所以它不会重新启动,直到我手动杀死它。为什么会发生这种情况,我能做些什么来防止它发生?
我在 linux 下运行。崩溃后,JVM 不响应 SIGTERM,只响应 SIGKILL。当我使用本机调试器附加到 JVM 进程时,我看到线程都在 __kernel_vsyscall 中被阻塞。
【问题讨论】:
标签: java java-native-interface