Нахождение кучи коррупции - PullRequest
2 голосов
/ 18 марта 2011

Это расширение моего предыдущего вопроса, Сбой приложения без объяснения причин .

У меня много сбоев, которые, вероятно, вызваны повреждением кучи на сервере приложений. Эти сбои происходят только в производстве; они не могут быть воспроизведены в тестовой среде.

Я ищу способ отследить эти сбои.

Был предложен Верификатор приложений, и это было бы хорошо, но его нельзя использовать с нашим рабочим сервером. Когда мы пытаемся запустить его в производство с помощью верификатора приложения, он становится настолько медленным, что его невозможно использовать, хотя это довольно мощный сервер (64-разрядное приложение, 16 ГБ памяти, 8 процессоров). Запуская его без верификатора приложения, он использует только около 1 ГБ памяти и не более 10-15% циклов любого процессора.

Существуют ли другие инструменты, которые помогут найти повреждение кучи, не добавляя огромных накладных расходов?

Ответы [ 3 ]

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

Используйте отладочную версию библиотек времени выполнения Microsoft. Включите красное зонирование и автоматически проверяйте вашу кучу каждые 128 (скажем) операций кучи, вызывая _CrtSetDbgFlag() один раз во время инициализации.

_CRTDBG_DELAY_FREE_MEM_DF может быть весьма полезным для поиска ошибок, используемых после освобождения памяти, но размер вашей кучи монотонно увеличивается при ее использовании.

1 голос
/ 18 марта 2011

Будет ли какая-либо польза от его виртуализации и создания запланированных моментальных снимков, так что вы, надеюсь, сможете получить моментальный снимок за несколько секунд до его фактического сбоя?Затем возьмите снимок перед сбоем и запустите его в лабораторной среде.Если вы сможете снова вызвать его сбой, перезапустите снимок и начните проверку процесса на сервере.

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

брызговик с GCC.Он выполняет инструментарий кода для производственного кода.
Вы должны скомпилировать свою программу с помощью -fmudflapОн будет проверять любой неправильный доступ к указателю (куча / стек / статический).Он предназначен для работы с производственным кодом с небольшим замедлением (от х1,5 до х5).Вы также можете отключить проверку при доступе на чтение для ускорения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...