Java5 в сервисном приложении Windows - получить полный поток дамп необходимо уточнить - PullRequest
2 голосов
/ 02 сентября 2010

Я просмотрел несколько статей здесь, таких как:

дамп стека Java в Windows

Дамп потока программно / JDI (интерфейс Java Debugger Interface) Но не уловил точного ответа.

Проблема: в Windows есть приложение Java5, которое работает как служба (поэтому у нас нет консоли, где мы можем использовать Ctrl + Break длясбросы).Иногда приложение зависает, и нам нужен дамп потока.

Мы попробовали "jstack" , но он не работает в нашей среде env (мы обнаружили, что его Java6 совместима).

Итак, мы создали приложение C ++,вызывает дамп потока через .dll метод вызова, присоединяющийся к процессу приложения Java, и из-за этого ему нужны права локального администратора, что не так хорошо.

Поэтому нам бы хотелось, чтобы другие параметры работали без прав администратора и работали с Java 5 без большого количества переделок существующего кода.

Метод с печатью в дампах потоков LOOP (Thread.getAllStackTraces()) невариант, потому что нам нужно провести рефакторинг многих приложений, чтобы заставить его работать.

Так что лучшим вариантом будет только утилита, которая работает "вне" приложений.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Вы можете подключиться к процессу с помощью JConsole, чтобы обнаружить взаимные блокировки и получить следы стека потоков. Для получения дополнительной информации см. Здесь: http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html

0 голосов
/ 02 сентября 2010

Один из вариантов - сбросить всю информацию с помощью jmap, а затем проанализировать ее с помощью другого инструмента.

jmap -dump:format=b,file=<filename>.hprof <jvm_pid>

Я не уверен, купить, я думаю, что это будет работать на Java 5.

Ссылки:

...