Создайте дамп потока, который покажет вам трассировку стека для каждого потока Java в ВМ. Это скажет вам, что делают потоки, когда JVM зависает.
Чтобы сгенерировать дамп потока, на платформах UNIX вы можете использовать команду kill -QUIT process_id
, где process_id - идентификатор процесса вашей Java-программы.
В Windows вы можете ввести последовательность клавиш <ctrl><break>
в окне, где была запущена Java-программа. Отправка этого сигнала дает команду обработчику сигнала в JVM рекурсивно распечатывать всю информацию о потоках и мониторах внутри JVM.