Для начала я бы предложил JVisualVM .Он поставляется с JDK, поэтому вам просто нужно набрать jvisualvm
в командной строке, чтобы запустить его.
После запуска вы можете подключиться к работающей JVM, так что вы сможете подключиться кзависший Java-процесс и проверьте дамп стека на предмет всех запущенных потоков, а также содержимого кучи.
Другие полезные встроенные инструменты включают в себя:
jps
спискиидентификаторы процессов запуска процессов java
jstack
выводит дамп стека для каждого потока в указанном процессе JVM
jmap
создает дамп кучи для указанного процесса JVM (jvisualvm также может генерироватьдампы кучи)
jhat
анализирует дампы кучи, созданные с помощью jmap или jvisualvm
Конечно, есть и более сложные профилировщики. JProfiler весьма высоко ценится.