2013-03-22 3 views
0

Я занимаюсь анализом некоторых программ, над которыми мы работаем, где я работаю. Похоже, что в программном обеспечении возникают проблемы с памятью, когда вдоль линии, которую трудно отслеживать. Мы решили использовать Sysinternals VMMap для отслеживания памяти, используемой программным обеспечением.Использование VMMap в пакетном скрипте

У нас есть VMMap, экспортирующий использование каждые 20 секунд с помощью планировщика Windows, чтобы запустить пакетный скрипт, который отбрасывает целевой PID процесса и запускает с ним VMMap. Процесс выполняется некоторое время, выход появляется из каталога out, но через некоторое время он останавливается. Планировщик Windows сообщает, что задание выполнено нормально и запускает другой экземпляр, когда подразумевается триггер, еще раз без вывода.

После небольшого расследования это выглядит так: VMMap не может открыть процесс и пытается сообщить об ошибке через свой графический интерфейс. Поскольку мы работаем в пакетном режиме, мы не можем видеть эту ошибку, чтобы ее отклонить. Это приводит к тому, что многочисленные процессы «порождаются», но на самом деле ничего не делают.

Кто-нибудь сталкивался с этой проблемой при использовании VMMap или знал что-нибудь, что может помочь? Я думаю, что может быть какой-то флаг, который я могу передать, который подавляет сообщения или может каким-то образом обработать его в пакете, но Google не помог и не имеет форума Sysinternals. Любая помощь могла бы быть полезна.

ответ

0

VMMap - это инструмент графического интерфейса пользователя, поэтому попытка захвата его вывода автоматическим способом будет затруднена. Вместо этого попробуйте использовать другой инструмент SysInternals, Handle, который отображает много той же информации, но экспортирует/сообщает об этом в командной строке, где его можно захватить намного проще. В качестве альтернативы, не запускайте вывод автоматически с помощью VMMap, но вместо этого ваш скрипт каким-то образом обнаруживает ошибку или пропускает ожидаемые результаты/данные и останавливается, чтобы можно было просмотреть выход графического интерфейса.

+1

Это метод, которым мы в конечном итоге идем. Мы минимизировали вероятность передачи недопустимого PID, предварительно перепрограммировав перед вызовом (поскольку он был в цикле for, иногда PID закрывался до его достижения) и убивая любые процессы VMMap, когда мы знали, что они не должны запускаться. – MattD

0

Все инструменты Sysinternals открывают диалог согласия при первом запуске на новой машине, чтобы принять их лицензию. Я думаю, что вы разворачивали инструмент на производственной машине, и он пытался показать диалог согласия, но никто не нажал ok.

Они в основном создают раздел реестра на машине, который вы можете подделать, если вам нужно полностью автоматическое развертывание, или вы можете сразу запустить его на целевой машине для данного пользователя.

+0

Мы позаботились о том, чтобы принять начальное диалоговое окно лицензии, процесс инициировал и создал данные некоторое время, но через некоторое время остановился – MattD

Смежные вопросы