Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / дамп ThreadStack при ошибке StackOverflowError / 12 сообщений из 12, страница 1 из 1
16.05.2016, 16:49
    #39236767
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Добрый день, уважаемые форумчане.

Скажите пожалуйста, есть ли возможность при возникновении указанного исключения получить дамп ThreadStack.

То есть такой же текст, который отображается командой
Код: plaintext
jstack <PID>

Подопытный кролик -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
import javax.swing.*;
import java.lang.management.ManagementFactory;

public class OutThreadStackNew {
    static long lngMax=(long) 2e3;
    static void methodOne(long lngPar) {
        long lngOne=lngPar*1000+100l;
        long lngTwo=lngPar*1000+200l;
        long lngThree=lngPar*1000+300l;
        long lngFour=lngPar*1000+400l;
        long lngFive=lngPar*1000+500l;
        long lngSix=lngPar*1000+600l;
        long lngSeven=lngPar*1000+700l;

        if (lngPar<lngMax) {
            if ((Math.floorMod(lngPar,lngMax/50)==0) && (lngPar>=lngMax/10))
            {
                try {
                    System.out.println("wait");
                    Thread.sleep((long)5e3);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            methodOne(++lngPar);
        }
    }

    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, ManagementFactory.getRuntimeMXBean().getName());
        methodOne((long)1);
    }
}


Запускаю так -
Код: plaintext
java -Xss109k  OutThreadStackNew


Заранее спасибо.
...
Рейтинг: 0 / 0
16.05.2016, 16:55
    #39236777
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Мурзик,

Что именно не получается? Какое отношение код имеет к вопросу?
...
Рейтинг: 0 / 0
16.05.2016, 17:42
    #39236820
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Мурзик, для своего потока ты получаешь стек вызовов в объекте Exception.

Зачем тебе видеть стеки других потоков? Возможно какой-то performance-tuning?
Так для перформанса есть готовые инструменты. Или ты пишешь свой?
...
Рейтинг: 0 / 0
18.05.2016, 15:27
    #39238362
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Blazkowicz, добрый день.

Выполняю указанный код.
JVM валится - не хватает памяти ThreadStack.

Мне надо "извне" получить дамп ThreadStack в момент "падения JVM".

То есть не меняя исходный код.

Буду очень признателен за совет.
Заранее спасибо.
...
Рейтинг: 0 / 0
18.05.2016, 15:50
    #39238398
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
МурзикJVM валится - не хватает памяти ThreadStack.

Дык это не StackOverflowError, а OutOfMemoryError.

МурзикМне надо "извне" получить дамп ThreadStack в момент "падения JVM".

Надо что-то с такими корявыми формулировками решать.
Если то что выдаёт jstack, то это обычный thread dump - stack trace для всех потоков.
Полноценный же дамп всего стэка, это нечто другое.

МурзикТо есть не меняя исходный код.
О, как.
Как на счет
-XX:OnOutOfMemoryError="jstack %p"
Или у вас именно StackOverflowError?
...
Рейтинг: 0 / 0
19.05.2016, 10:43
    #39238843
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
BlazkowiczМурзикJVM валится - не хватает памяти ThreadStack.

Дык это не StackOverflowError, а OutOfMemoryError.




МурзикМне надо "извне" получить дамп ThreadStack в момент "падения JVM".

Надо что-то с такими корявыми формулировками решать.
Если то что выдаёт jstack, то это обычный thread dump - stack trace для всех потоков.
Полноценный же дамп всего стэка, это нечто другое.

МурзикТо есть не меняя исходный код.
О, как.
Как на счет
-XX:OnOutOfMemoryError="jstack %p"
Или у вас именно StackOverflowError?

У меня именно именно StackOverflowError -
Exception in thread "main" java.lang.StackOverflowError


Фрагмент вывода:авторD:\>java -Xss109k OutThreadStackNew
wait
Exception in thread "main" java.lang.StackOverflowError
at java.nio.Buffer.<init>(Buffer.java:197)
at java.nio.CharBuffer.<init>(CharBuffer.java:281)
at java.nio.HeapCharBuffer.<init>(HeapCharBuffer.java:70)
at java.nio.CharBuffer.wrap(CharBuffer.java:373)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:265)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:669)
at java.io.PrintStream.println(PrintStream.java:806)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:22)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)
at OutThreadStackNew.methodOne(OutThreadStackNew.java:28)


java -Xss109k -XX:OnOutOfMemoryError="jstack %p" OutThreadStackNew
пробовал - ничего не показывает.
Пробовал и так -
java -Xss109k -XX:OnOutOfMemoryError="jstack %%p" OutThreadStackNew

С тем же неУспехом.

Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
19.05.2016, 10:46
    #39238846
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
mayton, добрый день.
Мне нужен какой-нибудь инструмент, который бы мог в момент "падения JVM по причине Exception in thread "main" java.lang.StackOverflowError" получить что-нибудь похожее на вывод утилиты jstack.
...
Рейтинг: 0 / 0
19.05.2016, 10:46
    #39238847
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Мурзик,

Не вижу я никаких штатных способов повесить хук на stackoverflowerror без того чтобы расковырять внутренности OpenJDK.
Зачем это вообще нужно - не понятно. Размер других потоков на стэк того потока который упал никак не влияет. Банальный catch(Throwable e) поможет вывести стэк упавшего потока. Для чего нужны все остальные?
...
Рейтинг: 0 / 0
19.05.2016, 10:47
    #39238849
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Мурзик,

Можно попробовать через Java Debug поставить breakpoint на выброс этого исключения.
...
Рейтинг: 0 / 0
19.05.2016, 10:59
    #39238869
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
Blazkowicz, я не могу менять существующий код.
...
Рейтинг: 0 / 0
19.05.2016, 15:50
    #39239254
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
BlazkowiczМурзик,

Можно попробовать через Java Debug поставить breakpoint на выброс этого исключения.

Сделал так -

1. Запустил отдалчик:
jdb -Xss109k OutThreadStackNew

2. В отладчике выполнил команду
>run

3. Дождался сообщения об исключении

4. Командой where all посмотрел, что делается в различных Thread

5. Не выходя из отладчика, в другой консоли выполнил jps для получения PID нужного процесса

6. В другой консоли выполнил jstack -l -F PID и получил некое подобие дампа Thread Stack.

Вот еще бы узнать, как можно получить значение "занятой" памяти в разделе ThreadStack (т.е. сколько из 109k занято)....

Заранее спасибо за совет.
...
Рейтинг: 0 / 0
19.05.2016, 16:02
    #39239279
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дамп ThreadStack при ошибке StackOverflowError
МурзикВот еще бы узнать, как можно получить значение "занятой" памяти в разделе ThreadStack (т.е. сколько из 109k занято)....

Это вопрос на целый семинар. IMHO.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / дамп ThreadStack при ошибке StackOverflowError / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]