UMDH & perfmon частные байты
Я пытаюсь использовать UMDH, чтобы найти, где выделяются огромные куски памяти, но результаты, которые я получаю, кажутся совершенно абсурдными.
Я запускаю программу, жду, пока она достигнет равновесия, а затем делаю снимок с помощью umdh. Затем я выполняю действие, которое заставляет его высасывать память, ждать, пока оно снова достигнет равновесия, и получить еще один снимок. Затем я запускаю diff:
umdh -d -v 1.txt 2.txt > diff.txt
Я наблюдаю 500 миллионов дополнительных личных байтов в perfmon (другие счетчики памяти также растут соответственно). Разница в UMDH показывает "уменьшение..." какого-то огромного числа. Чего-чего??? Кто-нибудь может объяснить, почему это может иметь место?
Затем я прокомментировал всю активность в функции, о которой сообщалось в самом большом стеке роста. Я выполнил вышеупомянутое повторение снова, наблюдал ту же самую диаграмму роста 500M, но UMDH сообщает о небольшом увеличении использования памяти!!! Очень маленькое существующее оперативное слово там.
Первая часть действительно поражает меня. Что может заставить UMDH показать уменьшение использования кучи, но perfmon показывает довольно большое увеличение использования выделенной памяти тем же процессом??
Я рассматривал стеки потоков, но количество стеков потоков фактически уменьшается. Что еще может войти в "частные байты"?
1 ответ
Поместите файл с информацией отладки, т.е. 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
и перезапустите exe перед тем, как снова запустить umdh.