У меня есть рабочий процесс Java в стандартном окне команд окон. т.е. я выполнил 'cmd' и ввел в Java - банка...
Я должен быть в состоянии получить полный дамп стека всех потоков если вообще возможный.
я помню, что в соответствии с Linux можно отправить сообщение в JVM через опцию на команде выхода.
в этом документе состояние солнца
Для генерации отслеживания стека на Windows 95 или платформ Windows NT, вводят сочетание клавиш в окно, куда программа Java работает, или нажмите кнопку Close на окне.
это ясно неправильно, как закрывается, терминал действительно только уничтожает процесс и закрывает окно.
Ввод Ctrl+Break - это правильный способ генерации дампов потоков в Windows.
Может быть, вы нажимаете Ctrl+C (= прерывание)? При этом будет отправлен SIGINT, который, как правило, убьет ваш процесс.
В дополнение к ответу Seth вы также можете запустить JConsole на вашем компьютере, чтобы осмотреть трассировку стека каждого потока. Это имеет дополнительное преимущество возможности обнаруживать тупики и мониторинг использования памяти.
Другие плакаты верны - 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();
}
Вы можете выбрать любой метод, который вы хотите поймать свою программу, чтобы это произошло, и формат / прямой выход.
Недостатком этого метода заключается в том, что он не точен, в том, что стопки различных потоков не гарантированы, не были приняты в одно и то же время. Тем не менее, есть ассоциированное преимущество перед производительностью в том, что весь ваш процесс не будет приостановлен, пока сделан снимок.
Можно использовать jstack [ опция ] pid
(если речь идет о дампе потока). Используйте jps
для поиска идентификатора вашего Java-процесса.
Это может помочь вам, но и зависит от того, на какой версии 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
В Java 6 JDK+ исполняемый файл jvisualvm позволяет подключиться к работающей программе (двойной щелчок по ее записи в левой части).
При подключении с правой стороны имеется панель Threads, на которой имеется кнопка Thread Dump Dump (Дамп резьбы).
Это дает вам дамп резьбы.
После создания можно A) Выбрать все - скопировать и вставить дамп темы в текстовый редактор. или B) Щелкнуть правой кнопкой мыши на созданной в дереве с левой стороны и сказать "Сохранить как".
Notes jvisualvm также позволяет делать снимки всего приложения для последующего анализа.
Взгляните на этот пост переполнения стека
Dip Dump Программатически / JDI (интерфейс отладчика Java)
Мы реализовали метод JMX для сброса следов стека. Это действительно удобно, потому что вы можете проверить следы стека в веб-браузере даже на удаленном компьютере.