Я занимаюсь анализом некоторых программ, над которыми мы работаем, где я работаю. Похоже, что в программном обеспечении возникают проблемы с памятью, когда вдоль линии, которую трудно отслеживать. Мы решили использовать Sysinternals VMMap для отслеживания памяти, используемой программным обеспечением.Использование VMMap в пакетном скрипте
У нас есть VMMap, экспортирующий использование каждые 20 секунд с помощью планировщика Windows, чтобы запустить пакетный скрипт, который отбрасывает целевой PID процесса и запускает с ним VMMap. Процесс выполняется некоторое время, выход появляется из каталога out, но через некоторое время он останавливается. Планировщик Windows сообщает, что задание выполнено нормально и запускает другой экземпляр, когда подразумевается триггер, еще раз без вывода.
После небольшого расследования это выглядит так: VMMap не может открыть процесс и пытается сообщить об ошибке через свой графический интерфейс. Поскольку мы работаем в пакетном режиме, мы не можем видеть эту ошибку, чтобы ее отклонить. Это приводит к тому, что многочисленные процессы «порождаются», но на самом деле ничего не делают.
Кто-нибудь сталкивался с этой проблемой при использовании VMMap или знал что-нибудь, что может помочь? Я думаю, что может быть какой-то флаг, который я могу передать, который подавляет сообщения или может каким-то образом обработать его в пакете, но Google не помог и не имеет форума Sysinternals. Любая помощь могла бы быть полезна.
Это метод, которым мы в конечном итоге идем. Мы минимизировали вероятность передачи недопустимого PID, предварительно перепрограммировав перед вызовом (поскольку он был в цикле for, иногда PID закрывался до его достижения) и убивая любые процессы VMMap, когда мы знали, что они не должны запускаться. – MattD