Определение Критериев для Дампа

Как упомянуто, чтобы получить непосредственный дамп рабочего процесса, только определите это по имени или PID без других критериев дампа, и дополнительное имя файла дампа.

ProcDump может контролировать использование ЦП целевого процесса и создать файл дампа, когда он превышает порог в течение установленного срока времени. В этом примере, если использование ЦП Тестэппа непрерывно превышает 90 процентов в течение пяти секунд, ProcDump генерирует файл дампа и затем выходит:

procdump-c 90-s 5 testapp.

Если Вы опускаете -s опцию, период времени по умолчанию составляет 10 секунд. Чтобы получить многократные выборки, в случае, если первое было к результату некоторого переходного условия, не связанного с проблемой, Вы отслеживаете (то есть, положительная ложь), используете -n опцию, чтобы определить сколько дампов, чтобы получить перед выходом. В следующем примере ProcDump будет продолжать контролировать Testapp и создавать новый файл дампа каждый раз, когда это выдерживает 95-процентный ЦП в течение двух секунд, пока это не получило 10 дампов:

procdump-c 95-s 2-n 10 testapp.

 

На многожильной системе единственный поток не может использовать 100 процентов времени всех процессоров. На двухъядерном максимальный поток может использовать, 50 процентов; на четырехъядерном максимум составляет 25 процентов. Чтобы масштабировать -c порог против числа ЦП на системе, добавьте -u к командной строке. На двухъядерной системе procdump-c 90-u testapp создает дамп, когда Testapp превышает 45-процентный ЦП в течение 10 секунд — эквивалент 90 процентов одного из ЦП. На системе с 16 ядрами триггерный порог составляет 5.625 процентов. Поскольку -c требует целочисленного значения, -u опция увеличивает гранулярность, с которой можно определить порог на многожильных системах. См., что "Составной Случай Outlook Зависает" в Главе 17, "Зависает и Вялая Производительность", для примера ее использования.

Примечание. Поток пользовательского режима, выполняющий трудный ограниченный ЦП цикл, и часто, будет, как могут планировать, будет работать больше чем на одном ЦП, если его сродство процессора не было установлено связать это с одним ЦП.-u опция масштабирует порог только против числа ядер; это не означает, "Создайте дамп, если процесс превышает порог на единственном ЦП." Это не было бы возможно так или иначе, потому что Windows не предоставляет информацию об отслеживании, чтобы поддерживать такой запрос.

Чтобы получить периодическую серию дампов, используйте-s и-n опции вместе без любых других критериев дампа.-s опция определяет число секунд между концом ­предыдущего получения и начало следующего получения.-n опция определяет сколько дампов, чтобы получить. Следующий пример получает дамп Testapp сразу, другой дамп пять секунд спустя, и снова спустя пять секунд после этого, для в общей сложности трех дампов:

procdump-s 5-n 3 testapp.

Чтобы получить дамп, когда процесс поражает необработанное исключение, используйте-e опцию. Используйте-e 1, чтобы получить дамп на любом исключении, включая исключение первого шанса. Используйте-t, чтобы получить дамп, когда процесс завершается.-t опция полезна, чтобы идентифицировать причину неожиданного выхода процесса, который не вызывается необработанным исключением. Если Вы добавляете-b, контрольные точки отладки обработок ProcDump как исключения; иначе, это игнорирует их. Например, программа могла бы содержать код как следующее:

если (IsDebuggerPresent).

DebugBreak ();.

ProcDump присоединяет к целевой программе как отладчик, API IsDebuggerPresent возвратится ПРАВДА, и DebugBreak вызовут. ProcDump получит дамп, когда DebugBreak вызовут, только если Вы определяете-b.

-h опция ProcDump контролирует целевой процесс для подвешенного (небыстро реагирующего) высокоуровневого окна и получает дамп когда обнаружено. ProcDump использует то же самое определение "не отвечающий", который используют Windows и Диспетчер задач: если окно, принадлежащее процессу, не в состоянии ответить на сообщения окна в течение пяти секунд, это считало подвешенным. ProcDump должен работать на том же самом рабочем столе как целевой процесс, чтобы использовать эту опцию.

 

Можно использовать порог заряда фиксации процесса, чтобы инициировать дамп. Определите порог памяти в Мбайте с-m опцией. Следующий пример получает дамп, когда заряд фиксации Тестэппа превышает 200 Мбайт:

procdump-m 200 testapp.

ProcDump проверяет счетчики памяти процесса однажды в секунду, и это получает дамп, только если количество памяти процесса, заряженной против системного предела фиксации (сумма размеров файла оповещения плюс большая часть RAM), превышает порог в момент проверки. Если заряд фиксации пронзает только кратко, ProcDump не мог бы обнаружить его.

Наконец, можно использовать любой счетчик производительности, чтобы инициировать дамп. Определите-p опцию, сопровождаемую именем счетчика и порога, чтобы превысить. Поместите встречное имя в двойные кавычки, если оно содержит пробелы. Следующий пример получает дамп Taskmgr.exe, если число процессов на системе превышает 750 в течение трех секунд или больше:

procdump-p "\System\Processes" 750-s 3 taskmgr.exe.

Один способ получить допустимые встречные имена состоит в том, чтобы добавить их в Мониторе Производительности и затем просмотреть имена на вкладке Data диалогового окна Свойств. Однако, нотация Перфмона по умолчанию для того, чтобы отличить многократные экземпляры процесса со знаком хеша и порядковым номером (например, cmd#2) не ни предсказуема, ни устойчива — имя, связанное с определенным процессом, может измениться, поскольку другие экземпляры запускаются или выходят. Поэтому, ProcDump не поддерживает эту нотацию, но вместо этого поддерживает process_PID нотацию, описанную в статье Microsoft Knowledge Base 281884. Например, если у Вас есть два экземпляра Testapp с PID 1135 и 924, можно контролировать атрибуты прежнего, определяя это как testapp_1135.

Следующий пример получает дамп того процесса, если его количество дескриптора превышает 200 в течение трех секунд:

procdump-p "\Process (testapp_1135) \Hand "le считают" 200-s 3 1135.

process_PID нотация не обязательна. Можно определить только имя процесса, но результаты будут непредсказуемы, если многократные экземпляры того процесса будут работать.

Опции могут быть объединены. Следующая команда получает дамп, если Testapp превышает ЦП или порог заряда фиксации, имеет подвешенное окно или необработанное исключение, или иначе выходит:

procdump-m 200-c 90-s 3-u-h-t-e testapp.

Чтобы прекратить контролировать в любое время, только нажмите Ctrl+C или Ctrl + Повреждение.

Опции Файла дампа

Различные опции дампа отладки доступны в зависимости от версии dbghelp.dll того ProcDump использование. Чтобы получить последние и самые большие функции, установите последнюю версию

 Средства отладки для Windows, скопируйте ProcDump.exe в папку, содержащую dbghelp.dll, и выполненный это оттуда.

Как минимум дампы, создаваемые ProcDump, будут содержать основную информацию о процессе и всех его потоках, включая трассировки стека для всех потоков; данные разделяют от всех загруженных ­модулей, включая глобальные переменные; и информация о подписи модуля так, чтобы соответствующие файлы символа могли быть загружены с сервера символа, даже если дамп анализируется на абсолютно различной платформе.

Примечание. С Dbghelp.dll версией 6.1 или выше, ProcDump добавляет данные использования ЦП потока так, чтобы отладчик! безудержная команда может показать количество времени, использованное каждым потоком. Версия 6.1 включается с Windows 7 и Windows Server 2008 R2.

Чтобы включать доступную память всего процесса в дамп, добавьте - опция мамы к командной строке ProcDump. С более новыми версиями dbghelp.dll, эта опция также получает информацию об области памяти, включая детали о настройках защиты и выделениях. Отметьте, что - опция мамы делает файл дампа намного больше и может быть ­очень отнимающей много времени, потенциально занимая несколько минут, чтобы записать память большого приложения к диску. (Опция дампа Miniplus, описанная в следующем разделе, столь же полезна как полный дамп, но до 90 процентов меньше.)

Обычно, ProcDump должен приостановить целевой процесс, в то время как дамп получается. Windows 7 и Windows Server 2008 R2, представленные функция отражения процесса, которая позволяет процессу быть "клонированным" так, чтобы процесс мог продолжать работать, в то время как снимок памяти выводится. Можно использовать в своих интересах эту функцию при использовании -r опции. ProcDump создает три файла: dumpfile.dmp, который получает информация о потоке и процесс; dumpfile-отраженный. dmp, который получает память процесса; и dumpfile.ini, который связывает их и является файлом, который следует открыть с отладчиком. Windbg обрабатывает *.ini как допустимый тип файла дампа, хотя открытое для файла диалоговое окно не указывает так.

На x64 выпусках Windows ProcDump создает 32-разрядный файл дампа, когда целевой процесс - 32-разрядный процесс. Чтобы переопределить это значение по умолчанию и создать 64-разрядный файл дампа, добавьте -64 к командной строке ProcDump.

Дампы Miniplus

Miniplus (-mp) тип дампа был специально предназначен, чтобы заняться растущей проблемой получения полных дампов больших приложений, таких как Банк сообщений Microsoft Exchange (store.exe) на больших серверах. Например, получая полный дамп Exchange 2010 может занять 30 минут и привести к файлу дампа 48 Гбайт. Сжатие, которые спиливают к 8 Гбайт, может занять еще 60 минут, и загрузка сжатого файла к поддержке Microsoft может занять ­еще шесть часов. Получение дампа Miniplus того же самого Exchange server занимает одну минуту, и приводит к файлу дампа на 1.5 Гбайт, который занимает две минуты, чтобы сжаться и приблизительно 15 минут, чтобы загрузить.

Хотя первоначально разработано для Exchange, алгоритм универсален и работает также над Microsoft SQL Server или любым другим собственным приложением, которое выделяет области памяти большой емкости. Это - то, потому что алгоритм использует эвристику, чтобы определить, какие данные должны быть включены.

Дамп Miniplus запускается, создавая минидамп и добавляет ("плюс") память, которую считают важной. Первый шаг должен считать только страницы отмеченными как чтение-запись. Это исключает большинство страниц изображения, но все еще сохраняет страницы изображения, связанные с глобальными переменными. Следующий шаг должен счесть самую большую область памяти чтения-записи больше чем 512 Мбайт. Если найдено, область памяти временно исключается. Область памяти - набор того же самого - измеренные ­выделения памяти. Например, если будет двадцать областей на 64 Мбайта (общее количество на 1280 Мбайт), и пять областей на 128 Мбайт (общее количество на 640 Мбайт), то области на 64 Мбайта будут исключены, потому что они используют больше памяти чем области на 128 Мбайт даже при том, что размер выделений не является самым большим. У этих исключенных областей есть секунда, оказываются включенный. Они делятся на блоки на 4 Мбайта, и если ссылающийся любым стеком потока, блок на 4 Мбайта, на который ссылаются, включается.

Даже если процесс не является чрезмерно большим, дампы Miniplus все еще значительно меньше чем полные дампы, потому что они не содержат исполнимое изображение процесса. Например, полный дамп Блокнота составляет приблизительно 50 Мбайт, но Блокнот, дамп Miniplus составляет только приблизительно 2 Мбайта. И полный дамп Microsoft Word обычно - приблизительно 280 Мбайт, но дамп Miniplus того же самого процесса составляет только приблизительно 36 Мбайт. Когда процесс не является чрезмерно большим, можно получить приблизительный размер дампа, просматривая Полное/Частное значение в VMMap.

Примечание. Отлаживая дампы Miniplus, отладчик должен занять место в опущенных страницах изображения от хранилища символа (.sympath) или исполнимого хранилища (.exepath). Если Вы получаете дампы Miniplus своего приложения, Вы должны поддержать и символ и исполнимое хранилище, которое содержит каждую сборку Вашего приложения.

Дополнительная выгода реализации Miniplus - своя возможность восстановить из памяти отказы чтения. Отказ чтения памяти - причина, почему различные утилиты дампа иногда не в состоянии получить полный дамп. Если Вы натыкаетесь на эту проблему, получая полный дамп, попытайтесь использовать Miniplus вместо этого, чтобы активировать эту логику восстановления.

Опция дампа Miniplus может быть объединена с другими опциями ProcDump, поскольку следующие примеры демонстрируют. Чтобы получить единственный дамп Miniplus store.exe, используйте следующую командную строку:

procdump-mp store.exe.

Используйте следующую команду, чтобы получить единственный дамп Miniplus, когда store.exe отказывает:

procdump-mp-e store.exe.

Эта команда получает три дампа Miniplus store.exe на расстоянии в 15 секунд:

procdump-mp-n 3-s 15 store.exe.

Чтобы получить три дампа Miniplus, когда RPC Усредненный счетчик производительности Задержки составляет более чем 250 мс в течение 15 секунд, используйте эту команду:

procdump-mp-n 3-s 15-p "\MSExchangeIS\RPC Усредненная Задержка" 2 50 store.exe.

Отметьте, что я не рекомендую, чтобы Вы получили дамп Miniplus управляемого (СЕТЬ) приложение, но что Вы получаете полный дамп (-мама) вместо этого. Алгоритм Miniplus пытается получить полный дамп в этой ситуации, но потому что это создает сверху минидампа, получающийся дамп не столь же полон как полный дамп. Полный дамп необходим, потому что неповрежденные структуры данных GC и доступ к изображению NGEN (который не будет на символе или исполнимом хранилище) требуются отладчиком.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: