2013-06-25 3 views
0

Я пытаюсь использовать UMDH, чтобы найти, где выделяются огромные куски памяти, но результаты, которые я получаю, кажутся совершенно абсурдными.UMDH & perfmon private bytes

Я запускаю программу, жду, пока она достигнет равновесия, а затем возьмет снимок с umdh. Затем я выполняю действия, которые заставляют его всасывать память, ждать, пока она снова достигнет равновесия, и возьмите еще один снимок. Тогда я бегу диф:

umdh -d -v 1.txt 2.txt > diff.txt 

Я свидетельствование 500M дополнительных частных байтов в PerfMon (другие счетчики памяти также растут, соответственно). UMDH diff показывает «уменьшение ...» некоторого огромного количества. Чего-чего??? Может ли кто-нибудь объяснить, почему это может быть так?

Затем я прокомментировал всю активность в функции, о которой сообщалось в самом большом стеке роста. Я снова выполнил вышеуказанный повтор, посмотрел тот же шаблон роста 500M, но UMDH сообщает о небольшом увеличении в использовании памяти! Очень мало было оперативного слова.

Первая часть действительно взрывает мой разум. Что может привести к тому, что UMDH продемонстрирует снижение использования кучи, но perfmon продемонстрирует довольно большой рост использования выделенной памяти в том же процессе?

Я рассматривал потоки стеков, но количество стека потоков фактически уменьшается. Что еще может пойти в «личные байты»?

ответ

0

Поместите файл с отладочной информацией, то есть pdb, в тот же путь к exe. Следующие команды работали, заменить PID с реальным идентификатором процесса вы хотите сбросить:

umdh -p:PID -f:memlog1.txt 

umdh -p:PID -f:memlog2.txt 

umdh memlog1.txt memlog2.txt > result.txt 

Если вы видите следующее предупреждение:

Warning: 
Warning: UMDH didn't find any allocations that have stacks collected. 
Warning: Use gflags to enable allocation stack collection. 
Warning: Restart the application for the setting to be in effect. 

пробег:

gflags -i "full\path\of\exe" +ust 

и перезапустить ех перед запуском umdh снова.