Как интерпретировать результаты из Allocations и VM Tracker в инструментах? - PullRequest
5 голосов
/ 26 октября 2010

Я отслеживаю очень жесткую ситуацию с утечкой памяти (или, скорее всего, с оставленной памятью).Я делаю следующее:

1) запускаю мое приложение
2) добираюсь до точки, где приложение покажет утечку
3) запускает инструменты, используя выбор «распределения»
4)присоединитесь к моему процессу и начните запись
5) сделайте начальный снимок кучи
6) сделайте начальный снимок с помощью VM tracker
7) воспроизведите шаги, которые приводят к увеличению памяти
8) сделайте еще один снимок кучи
9) сделать еще один снимок с помощью VM tracker

Если я сделаю эти шаги, я увижу результаты, которые на самом деле не имеют смысла.Я надеюсь, что мне не хватает информации о том, как работают эти инструменты.Например, я знаю, что инструмент «утечки» не отслеживает ВСЕ виды распределения памяти (например, углеродные приложения).Мое приложение - это огромное унаследованное приложение, которое может иметь странный код размещения в какой-то устаревшей подсистеме, с которой я не знаком.Тем не менее, вот что я вижу:

  • в первоначальном снимке трекера VM, когда я смотрю на сводку, тип MALLOC_SMALL довольно мал и составляет примерно 72 МБ (виртуальный размер)
  • во втором снимке использование MALLOC_SMALL выросло до 224 МБ (опять же виртуальный размер)
  • во втором снимке кучи, оно говорит мне, что размер кучи составляет 45 МБ

Так как MALLOC_SMALL может вырасти из72MB до 224MB, но объем памяти только 45MB?В инструменте Allocations отсутствует то, что записывает VMTracker?

Далее подтверждая, что я что-то упустил в инструменте Allocations ... если я посмотрю на НОВЫЕ регионы, перечисленные в MALLOC_SMALL (те, которые не были в первом снимке, но были во втором), эти адреса должнысоответствуют страницам, которые были выделены и составляют разницу в 72 МБ-> 224 МБ, верно?Затем я запомнил диапазон адресов для этого региона (например, 0x79000000-0x7b000000) и вернулся к инструменту Allocations и отсортировал список «All Objects» по адресу.Затем я ищу адреса в этом диапазоне.Тем не менее, я вижу только 4 выделения, которые составляют только 4 КБ ?!Где остальные 32 МБ, которые VM tracker сообщил в этом регионе?

Любая помощь будет принята с благодарностью .... Я надеюсь, что это что-то базовое о том, как работают эти инструменты, что я просто не понимаю.

1 Ответ

3 голосов
/ 26 октября 2010

Не прямой ответ - но Билл Бамгарнер недавно написал в блоге о некоторых применениях Инструментов и росте памяти:

http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/

Там есть хорошая информация ...

...