Если JVM перестала выполнять работу, снимите несколько дампов с интервалом в несколько секунд:
jcmd <pid> Thread.print -l или jstack -l <pid>.Найдите потоки в состоянии
BLOCKED. Сопоставьте монитор после waiting to lock с потоком, который держит его после locked. Если цепочка вернулась к первому потоку, взаимная блокировка подтверждена.WAITING и TIMED_WAITING сами по себе нормальны. Практический разбор дампов показывает, как сверить стеки с метриками. Исправлять нужно порядок захвата блокировок: увеличение пула цикл не разорвёт.
