powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / дамп ThreadStack при ошибке StackOverflowError
12 сообщений из 12, страница 1 из 1
дамп ThreadStack при ошибке StackOverflowError
    #39236767
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые форумчане.

Скажите пожалуйста, есть ли возможность при возникновении указанного исключения получить дамп 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
дамп ThreadStack при ошибке StackOverflowError
    #39236777
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик,

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

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

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

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

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

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

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

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

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

МурзикТо есть не меняя исходный код.
О, как.
Как на счет
-XX:OnOutOfMemoryError="jstack %p"
Или у вас именно StackOverflowError?
...
Рейтинг: 0 / 0
дамп ThreadStack при ошибке StackOverflowError
    #39238843
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
дамп ThreadStack при ошибке StackOverflowError
    #39238846
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, добрый день.
Мне нужен какой-нибудь инструмент, который бы мог в момент "падения JVM по причине Exception in thread "main" java.lang.StackOverflowError" получить что-нибудь похожее на вывод утилиты jstack.
...
Рейтинг: 0 / 0
дамп ThreadStack при ошибке StackOverflowError
    #39238847
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик,

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

Можно попробовать через Java Debug поставить breakpoint на выброс этого исключения.
...
Рейтинг: 0 / 0
дамп ThreadStack при ошибке StackOverflowError
    #39238869
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, я не могу менять существующий код.
...
Рейтинг: 0 / 0
дамп ThreadStack при ошибке StackOverflowError
    #39239254
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
дамп ThreadStack при ошибке StackOverflowError
    #39239279
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикВот еще бы узнать, как можно получить значение "занятой" памяти в разделе ThreadStack (т.е. сколько из 109k занято)....

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


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