Как интерпретировать результаты от Allocations и VM Tracker в инструментах?

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

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

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

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

Итак, как MALLOC_SMALL может увеличиться с 72 МБ до 224 МБ, а куча всего 45МБ? В инструменте распределения отсутствует что-то, что записывает VMTracker?

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

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

5
задан pj4533 26 October 2010 в 13:58
поделиться