Если у вас есть состояние гонки, то, безусловно, разумно использовать дополнительные ресурсы (т.е. установить JDK и использовать jps и jstack) для решения проблемы ...
Тем не менее, если вы запускаете приложение вне контейнера, вы можете просто запустить приложение из консоли и нажать ctrl + break (Windows), чтобы получить дамп потока. Или убить -3 на * nix.
Но, исходя из ваших ответов в комментариях, похоже, что это, вероятно, работает на каком-то сервере приложений.
Проблема здесь в том, что почти все, что вы делаете, вносит дополнительную неопределенность в ситуацию. Как вы узнаете, что ваш тупиковый монитор сам по себе не отвечает за взаимные блокировки?
Другим вариантом будет введение регистрации системных входов, а затем повторное воспроизведение того, что произошло в системе, на основе этих входов. Если ваш клиент в основном сказал, что он не поможет вам в устранении неполадок, связанных с вашей расой, то вам нужно найти его самостоятельно в своей тестовой среде. Эмуляция условий загрузки сайта клиента - один из способов сделать это.
Но на самом деле, я рекомендую вам поработать с ними, чтобы установить JDK (чтобы вы могли использовать jstack), или какое-либо приложение для мониторинга JRE 1.4 (черт возьми, убедитесь, что их сервер приложений уже не обеспечивает это такие вещи).