стопка Java выводит на окнах

У меня есть рабочий процесс Java в стандартном окне команд окон. т.е. я выполнил 'cmd' и ввел в Java - банка...

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

я помню, что в соответствии с Linux можно отправить сообщение в JVM через опцию на команде выхода.

в этом документе состояние солнца

Для генерации отслеживания стека на Windows 95 или платформ Windows NT, вводят сочетание клавиш в окно, куда программа Java работает, или нажмите кнопку Close на окне.

это ясно неправильно, как закрывается, терминал действительно только уничтожает процесс и закрывает окно.

22
задан pstanton 23 January 2010 в 20:51
поделиться

7 ответов

Ввод Ctrl+Break - это правильный способ генерации дампов потоков в Windows.

Может быть, вы нажимаете Ctrl+C (= прерывание)? При этом будет отправлен SIGINT, который, как правило, убьет ваш процесс.

18
ответ дан 29 November 2019 в 03:47
поделиться

В дополнение к ответу Seth вы также можете запустить JConsole на вашем компьютере, чтобы осмотреть трассировку стека каждого потока. Это имеет дополнительное преимущество возможности обнаруживать тупики и мониторинг использования памяти.

1
ответ дан 29 November 2019 в 03:47
поделиться

Другие плакаты верны - Ctrl-Break в консоли или JStack.

В противном случае, если вы используете Java 1.5 или выше, вы можете получить эту информацию программно во время выполнения, через:

Thread.getAllStacktraces () ( http: //java.sun .com / j2se / 1.5.0 / docs / api / java / lang / thread.html # getallstacktraces () )

затем итерации через результаты.

Немного навесной, но что-то вроде этого:

Map<Thread,StackTraceElement[]> traces = Thread.getAllStackTraces();
Iterator<Thread> i = traces.keySet().iterator();
while (i.hasNext()) {
   Thread thd = i.next();
   System.out.println("*** Thread id"+thd.getId()+":"+thd.getName()+" ***");
   StackTraceElement[] trace = traces.get(thd);
   for (int j=0; j < trace.length; ++j) {
      System.out.println(trace[j]);
   }
   System.out.println();
}

Вы можете выбрать любой метод, который вы хотите поймать свою программу, чтобы это произошло, и формат / прямой выход.

Недостатком этого метода заключается в том, что он не точен, в том, что стопки различных потоков не гарантированы, не были приняты в одно и то же время. Тем не менее, есть ассоциированное преимущество перед производительностью в том, что весь ваш процесс не будет приостановлен, пока сделан снимок.

1
ответ дан 29 November 2019 в 03:47
поделиться

Можно использовать jstack [ опция ] pid (если речь идет о дампе потока). Используйте jps для поиска идентификатора вашего Java-процесса.

36
ответ дан 29 November 2019 в 03:47
поделиться

Это может помочь вам, но и зависит от того, на какой версии JVM и провайдера вы используете.

http://java.sun.com/developer/technalarticles/j2se/manitoring/

http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html

http://java.sun.com/javase/6/docs/technotes/gieds/visualvm/index.html

1
ответ дан 29 November 2019 в 03:47
поделиться

В Java 6 JDK+ исполняемый файл jvisualvm позволяет подключиться к работающей программе (двойной щелчок по ее записи в левой части).

При подключении с правой стороны имеется панель Threads, на которой имеется кнопка Thread Dump Dump (Дамп резьбы).

Это дает вам дамп резьбы.

После создания можно A) Выбрать все - скопировать и вставить дамп темы в текстовый редактор. или B) Щелкнуть правой кнопкой мыши на созданной в дереве с левой стороны и сказать "Сохранить как".

Notes jvisualvm также позволяет делать снимки всего приложения для последующего анализа.

5
ответ дан 29 November 2019 в 03:47
поделиться

Взгляните на этот пост переполнения стека

Dip Dump Программатически / JDI (интерфейс отладчика Java)

Мы реализовали метод JMX для сброса следов стека. Это действительно удобно, потому что вы можете проверить следы стека в веб-браузере даже на удаленном компьютере.

0
ответ дан 29 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: