У меня есть библиотека C ++, которую я вызываю из Java через JNI. В коде C ++ есть ошибка, которая иногда приводит к сбою JVM. Чтобы быть устойчивым к таким сбоям, я обернул программу Java в сценарий оболочки, который перезапускает Java при выходе. В большинстве случаев это работает, но время от времени происходит сбой JVM (выводит собственную трассировку стека в stderr, больше не может быть присоединен отладчиком java, перестает потреблять сколько-нибудь заметное количество процессорного времени), но не завершается так что он не возобновится, пока я не убью его вручную. Почему это может произойти и что я могу сделать, чтобы предотвратить это?
Я работаю под Linux. После сбоя JVM не отвечает на SIGTERM, а только на SIGKILL. Когда я присоединяюсь к процессу JVM с помощью собственного отладчика, я вижу, что все потоки заблокированы в __kernel_vsyscall.