Дамп кучи с выделением большого объема памяти в Android Studio никогда не завершается

У нас есть приложение, которое переключается с 30 с лишним МБ памяти на более чем 500 МБ при переходе между действиями. Пока это происходит, я могу отслеживать распределения и видеть, ЧТО хранится в памяти, но я хочу создать HPROF-файл кучи, чтобы загрузить его в MAT и получить лучшее представление о том, что использует эту память.

Однако, когда я пытаюсь создать дамп, он просто показывает пунктирную линию и счетчик на графике памяти, и это продолжается (по-видимому) без конца. Я могу создавать дампы с более низким распределением без каких-либо проблем, но с выделенным 500+ МБ я не могу этого сделать.

Я искал известные проблемы с этим сценарием, но не нашел. Есть ли параметр, который я могу изменить, чтобы помочь ему, или что-то, что я могу сделать, чтобы устранить проблему? Без хорошего анализа кучи я слеп в том, что происходит с памятью.

Примечание. Я не ищу помощи с самой проблемой памяти, ATM, меня в основном интересует, как я могу заставить работать дамп кучи.


person jkane001    schedule 07.01.2017    source источник
comment
500 МБ должно быть намного больше предела кучи вашего процесса, поэтому я не уверен, насколько полезным будет MAT. Но если есть надежный способ добраться до проблемного состояния, напишите для него тестовый пример и посмотрите, повезет ли вам получить файл HPROF через Debug.dumpHprofData().   -  person CommonsWare    schedule 07.01.2017
comment
Попробую терминальный метод, спасибо! К сожалению, нет надежного способа воспроизвести проблему — мы можем без проблем использовать приложение в течение нескольких дней, а затем внезапно увидеть всплеск, и как только это произойдет, только удаление и повторная установка вернет его к рабочему состоянию. штат. Это довольно необычно.   -  person jkane001    schedule 07.01.2017
comment
Команда терминала @commonsware помогла, спасибо! Если вы представите это как ответ, я буду рад принять его.   -  person jkane001    schedule 12.01.2017
comment
Я не уверен, какую команду терминала вы имеете в виду. Я имел в виду встраивание Debug.dumpHprofData() в ваш код Java для программного создания файла HPROF. Возможно, вы захотите сами ответить на этот вопрос, чтобы объяснить, что вы сделали, что помогло вам в вашей ситуации.   -  person CommonsWare    schedule 12.01.2017
comment
Я искал решение этой проблемы для коллеги, и в то же время он нашел это решение (stackoverflow.com/questions/19954420/) и сделал это. Я не знал, что он использовал другой способ получения дампа памяти, чем я ему сказал, поэтому я неправильно понял, когда он сказал, что терминальный подход работает. Итак, суть в том, что есть (как минимум) 2 способа получить дамп памяти, кроме как с помощью кнопки дамп hprof в Android Monitor.   -  person jkane001    schedule 15.01.2017
comment
О, спасибо, что упомянули об этом! Я не знал, что есть опция командной строки для сброса кучи.   -  person CommonsWare    schedule 15.01.2017
comment
@CommonsWare нет проблем - если вы хотите поместить то, что вы сказали, в ответ, я с радостью приму это как ответ на мой вопрос.   -  person jkane001    schedule 16.01.2017
comment
Что ж, учитывая то, что вы использовали, я отметил это как дубликат вашего фактического решения. Я не понимаю, почему это работает там, где Android Studio не работает, поскольку и командная строка, и IDE должны использовать интерфейс adb для запроса дампа.   -  person CommonsWare    schedule 16.01.2017
comment
Попробуйте увеличить объем памяти, доступный для Android Studio: developer.android.com /студия/введение/   -  person tmm1    schedule 03.04.2018


Ответы (1)


Я уверен, что эта ссылка поможет вам найти то, что вы нашли. Я делал таким образом Вот ссылка:Memory Profiler

person K P    schedule 07.01.2017
comment
Я ценю ссылку, в ней есть хорошая информация, но я уже все это знал, моя проблема в том, что я не могу получить файл HPROF (как в конце статьи рекомендуется использовать MAT для углубленного профилирования) генерировать. - person jkane001; 07.01.2017