вывод мусора из сводки кучи windbg - PullRequest
2 голосов
/ 10 марта 2011

Во-первых, мой английский не очень хорош. Так жаль. Я не живу в английском районе.

У меня есть вопрос.

У меня работает фрагментация памяти серверной программы Windows. Из-за нехватки памяти не может работать больше недели. Может быть, это проблема.

Итак, я использовал для анализа памяти кучи команду windbg to '.heap -s address (heap handle). Но я не понимаю этот отчет. Посмотри на это.

       0:023> !heap -s 0x01490000
       Walking the heap 0000000001490000 ...........
       0: Heap 0000000001490000

       -- Omitted --

       Flags          00001002 - HEAP_GROWABLE 
       Reserved memory in segments              1047616 (k)
       Commited memory in segments              617812 (k)
       Virtual bytes (correction for large UCR) 188152 (k)
       Free space                               549 (k) (25 blocks)
       External fragmentation          0% (25 free blocks)
       Virtual address fragmentation   1254577998% (3 uncommited ranges)
       Virtual blocks  32 - total 0 KBytes
       Lock contention 1
       Segments        11

Фрагментация виртуального адреса имеет мусорное значение. в чем проблема?? Это правильное значение ??

Я запланировал. Пытался проверить улучшение производительности. Также определите, есть ли проблемы. Но не может быть, потому что это проблема.

Я пытался найти много статей. но я не смог получить полезную информацию.

Пожалуйста, помогите мне.

Во-первых, почему это произошло?

Второе, есть ли способ более эффективного использования памяти?

Может быть, вы читаете мой пост сложно. Я знаю. так действительно очень жаль.

Спасибо, что прочитали мой пост.

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

Если вы подозреваете утечку памяти, то отличным инструментом будет UMDH .Это бесплатный инструмент, и на MSDN есть хорошие документы.Это позволит вам получать стеки вызовов на allocs / deallocs и точно видеть, какие стеки вызовов просочились, при условии, что у вас есть полные символы.

1 голос
/ 05 апреля 2011

Команда кучи Windbg иногда глючит, особенно при отслеживании огромных утечек.Для изучения фрагментации памяти лучше использовать Vmmap http://technet.microsoft.com/en-us/sysinternals/dd535533

. Выясните предполагаемое расположение памяти из отчета Vmmap.Затем используйте Windbg для просмотра содержимого этих распределений.

0 голосов
/ 18 марта 2011

Для анализа проблем фрагментации памяти я обычно использую DebugDiag.Официальная версия 1.1, но если вы используете Windows 7 или Windows Server 2008, вам понадобится бета-версия 1.2, которая доступна по адресу http://viisual.net/Tools/ ( источник ).

В последнее времяЯ обнаружил, что могу использовать команду Windbg «! Address», чтобы получить полный дамп адресного пространства процесса.Поместив это в электронную таблицу Excel, преобразовав все шестнадцатеричные значения в двоичные и выполнив некоторые функции max / sum, я могу быстро выяснить, сколько является наибольшим доступным непрерывным блоком по сравнению с тем, сколько нераспределенного пространства является хорошим показателем того, какбольшая фрагментация есть.Я не пробовал этого, но вооружившись этой картой памяти, теоретически вы можете обнаружить поврежденные фрагменты и проверить содержимое памяти.

Ни одно из этих предложений не даст вам понять, как произошла фрагментация.Я бы определенно попробовал инструмент UMDH, который Нитин предложил в следующий раз.

...