Как получить трассировку стека Java от клиента, работающего в веб-старте? - PullRequest
1 голос
/ 07 апреля 2009

Я хотел бы получить идеи от сообщества SO по этому вопросу.

Вот проблема:

У нас есть пользователь на другом конце света, который запускает наше приложение через WebStart. Однако пользователь жалуется, что все его приложение зависает и перестает отвечать на запросы. Обычно клиент выполняет много запросов базы данных к распределенной базе данных.

Вопросы:

  1. Если мы попросим ее сделать CTRL-Break в ее приложении, куда JVM запишет трассировку стека?
  2. Было бы достаточно просто использовать JConsole ?
  3. Будет ли реализация JMX bean на клиенте излишней? Поможет ли это в решении проблем с производством?

Сейчас пользователи работают на JRE 1.5.0-b08, но мы планируем перейти на JRE 6 через пару месяцев.

Что вы думаете?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2009

Хосе, вы можете получить много информации от JVM несколькими способами.

Лучше всего включить отладку в удаленной JVM. Вы можете установить их, используя элемент j2se в дескрипторе XML, как показано здесь . Так как вы можете установить -Xdebug, у вас хорошее начало; Я никогда не пытался выполнять удаленную отладку в приложении для запуска через Интернет, поэтому может возникнуть проблема с настройкой удаленной части.

Вы также можете настроить некоторые вещи самостоятельно, добавив отдельный поток для удаленного общения с вами и отправки отладочных сообщений.

Вы можете использовать собственный java или log4j удаленный регистратор .

Если он зависает так, как вы описываете, то шансы очень высоки, что происходит зависание какой-то сети. Можете ли вы провести трассировку / отладку на вашем конце разговора?

1 голос
/ 08 апреля 2009

Вместо этих предложений по отладке, почему бы вам не установить обработчик исключений для ваших потоков? См. Java.lang.Thread.

void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

Вот соответствующий Javadoc: http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

Если вы установите это в своем коде и один раз в EDT Swing, то просто напишите некоторый Java-код, чтобы отправить его по электронной почте себе, сохранить на сервере, показать его пользователю и т. Д.

0 голосов
/ 07 апреля 2009

Вам необходимо отобразить консоль Java (запустить javaws из командной строки и выбрать ее в диалоговом окне настроек), а затем нажать «v»

...