Предотвращение сбоя программы при отображении трассировки стека распределения

Вопрос

Почему VisualVM завершает мою программу при попытке просмотреть трассировку стека распределения объектов и как это исправить?


Я очищаю приложение, у которого есть несколько проблем с памятью, самая большая из которых - создание кучи недолговечных int[], из-за которых сборщик мусора срабатывает как сумасшедший:

введите здесь описание изображения

Когда я щелкаю правой кнопкой мыши int[] и выбираю Сделать снимок и показать трассировки стека распределения, мое приложение закрывается и появляется окно с предупреждением: Не удалось получить снимок результатов. Приложение закрыто:

введите здесь описание изображения

Самым близким, что я нашел по этому вопросу, был отчет об ошибке, в котором рекомендовалось запустить мое профилированное приложение. с -Xnoclassgc. Не сработало, результаты такие же.


Технические характеристики

VisualVM: 1.8.0_60 (Build 1380-140910); platform 20140910-unknown-revn
Java: 1.8.0_60; Java HotSpot(TM) 64-Bit Server VM (25.60-b23, mixed mode)
Eclipse: Luna Release (4.4.0) Build id: 20140612-0600
System: Windows 7 (6.1) Service Pack 1, amd64 64bit

Журнал сбоев

http://pastebin.com/a4YPWutj

Размер журнала сбоев превысил ограничение на количество символов, поэтому мне пришлось разместить его в другом месте. Извините.


person Dioxin    schedule 02.12.2015    source источник
comment
Сначала несколько вопросов: 1. Связан ли Eclipse с этой ситуацией, которую вы только что описали? Вы указали свою версию Eclipse, но не упомянули ее иначе. 2. Информация о Java и системе поступила с сервера, на котором запущено приложение?   -  person Gergely Bacso    schedule 10.12.2015
comment
Также сбой приложения должен приводить к сохранению отчета о сбое для целей отладки. Можете ли вы найти файл (hprof?) И вставить сюда соответствующий контент?   -  person Gergely Bacso    schedule 10.12.2015
comment
Вы тестируете Java Mission Control (jmc.exe)? Это тот же инструмент, но для Java8 без каких-либо бесплатных функций. Но вы можете сделать то же самое, что и VisualVM.   -  person Mr_Thorynque    schedule 10.12.2015
comment
@GergelyBasco Это IDE, из которой была запущена программа, не уверен, может ли это сыграть роль. Однако я использую автономный VisualVM, а не плагин. И да, это спецификации машины, на которой работало профилированное приложение. Кажется, я не могу найти какой-либо файл дампа кучи, я воспроизведу проблему и посмотрю, генерируется ли она. Я также загружу изображение всплывающего окна с ошибкой, которое представляет собой просто сообщение и ничего больше /:   -  person Dioxin    schedule 10.12.2015
comment
@Mr_Thorynque Я использовал его для мониторинга данных раньше, но не знаком с ним. Я попытаюсь использовать его самописец, чтобы увидеть, смогу ли я решить проблему с памятью, но мне бы очень хотелось узнать проблему, стоящую за ошибкой VisualVM, и как ее исправить, если эта проблема возникает в среде. где присутствует / поддерживается только VisualVM   -  person Dioxin    schedule 10.12.2015
comment
Это параметр JVM, который необходимо установить для определения конкретного местоположения файла сбоя: -XX:ErrorFile=/var/log/java/hs_err_pid%p.log. Просто убедитесь, что вы добавили это в приложение, а не в Eclipse.   -  person Gergely Bacso    schedule 11.12.2015
comment
@GergelyBacso Я добавил журнал сбоев   -  person Dioxin    schedule 12.12.2015
comment
Сбой приложения при этом не ожидается. Вы пробовали обновиться до более новых версий Java и Visual VM?   -  person Jayan    schedule 12.12.2015


Ответы (1)


Ok. Итак, на основании полученного журнала сбоев, похоже, вы столкнулись с ошибкой VisualVM, о которой уже сообщалось здесь:

при профилировании JVM происходит сбой

Отправитель исходной ошибки сузил это поведение до Java8, поэтому лучший шанс у вас - запустить VisualVM в более старой (Java7) среде выполнения. Если это вариант для вас, вам нужно только загрузить Java7 JDK и запустить VisualVM прямо оттуда.

person Gergely Bacso    schedule 12.12.2015
comment
Ой, я думаю, я мог бы начать использовать JMC сейчас, поскольку использование Java 7 не вариант /: Спасибо, что нашел это! - person Dioxin; 12.12.2015