Отслеживание использования процессора и памяти для каждого процесса

StackOverflow https://stackoverflow.com/questions/69332

Вопрос

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

Есть ли способ (в Windows) отслеживать историю использования процессора и памяти для какого-либо процесса?Например.Я начну отслеживать "firefox", и примерно через час увижу график использования его процессора и памяти в течение этого часа.

Я ищу либо готовый инструмент, либо программный способ достижения этой цели.

Это было полезно?

Решение

Просто введите perfmon в Start > Run и нажмите enter.Когда откроется окно Производительности, нажмите на знак +, чтобы добавить новые счетчики в график.Счетчики представляют собой различные аспекты работы вашего компьютера и сгруппированы по сходству в группы, называемые "Объект производительности".

В ответ на ваши вопросы вы можете выбрать объекты производительности "Процесс", "Память" и "Процессор".Затем вы сможете увидеть эти счетчики в режиме реального времени

Вы также можете указать утилиту для сохранения данных о производительности для последующей проверки.Для этого выберите "Журналы производительности и оповещения" на левой панели.(Он находится прямо под консолью системного монитора, которая предоставляет нам вышеупомянутые счетчики.Если его там нет, нажмите "Файл" > "Добавить / удалить оснастку", нажмите "Добавить" и выберите в списке "Журналы производительности и оповещения"".) В разделе "Журналы производительности и оповещения" создайте новую конфигурацию мониторинга в разделе "Журналы счетчиков".Затем вы можете добавить счетчики, указать частоту дискретизации, формат журнала (двоичный или обычный текст) и местоположение журнала.

Другие советы

Обозреватель процессов может показывать общее процессорное время, затраченное процессом, а также график истории каждого процесса.

Используя perfmon.exe, я попытался использовать счетчик "Личных байтов" в разделе "Счетчики процессов" для отслеживания использования памяти, и он работает хорошо.

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

@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends:  typeperf
: Usage:  foo.cmd <processname>

set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)

:end
echo Process seems to have terminated.

Я согласен, perfmon.exe позволяет добавлять счетчики (щелкните правой кнопкой мыши на правой панели) для любого процесса, который вы хотите отслеживать.

Объект производительности:Процесс Установите флажок "Выбрать экземпляры из списка" и выберите firefox.

WMI - это инструмент управления Windows, и он встроен во все последние версии Windows.Это позволяет вам программно отслеживать такие вещи, как загрузка процессора, дисковый ввод-вывод и использование памяти.

Perfmon.exe является графическим интерфейсом для этого интерфейса и может отслеживать процесс, записывать информацию в журнал и позволять вам анализировать журнал постфактум.Это не самая элегантная программа в мире, но она выполняет свою работу.

Process Lasso предназначен скорее для автоматизации процессов и оптимизации классов приоритетов, а не для графиков.Тем не менее, это делает предлагает историю загрузки процессора для каждого процесса (нарисованную в виде белой линии на графике), но это НЕТ предлагайте историю использования памяти для каждого процесса.

Отказ от ответственности:Я являюсь автором Process Lasso, но на самом деле не одобряю его здесь - поскольку есть лучшие решения (perfmon является лучшим).

Самое лучшее, что когда-либо было, - это Windows Vista + Монитор ресурсов и производительности.Он может отслеживать использование процессора, памяти, доступа к сети и диску процессами с течением времени.Это отличная утилита для сбора общей системной информации, которую следовало создать давным-давно.Если я не ошибаюсь, он может отслеживать использование процессора и памяти для каждого процесса с течением времени (среди прочего, перечисленных).

Вы также можете попробовать с помощью скрипта C # / Perl / Java получить данные об использовании с помощью команд WMI, и ниже приведены шаги для этого.

Нам нужно выполнить 2 запроса выбора WMI и применить формулу использования CPU%

1.Чтобы получить общее количество логических процессов

select NumberOfLogicalProcessors from Win32_ComputerSystem

2.Чтобы получить значения PercentProcessorTime, Timestamp_Sys100NS (была применена формула загрузки процессора для получения фактического процента использования) и WorkingSetPrivate (RAM) минимум 2 раза с интервалом ожидания в 1 секунду

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3.Примените формулу загрузки процессора в процентах

CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

p2 указывает PercentProcessorTime, полученное во второй раз, а p1 указывает PercentProcessorTime, полученное в первый раз, t2 и t1 для Timestamp_Sys100NS.

Пример кода Perl для этого можно найти по ссылке http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

Эта логика применима ко всем языкам программирования, которые поддерживают запросы WMI

Хотя я еще не пробовал это делать, ProcDump ( Выгрузка ) кажется, это лучшее решение.

Описание с сайта:

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

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

Perfmon.exe встроен в Windows.

Возможно, вы захотите взглянуть на Технологическое Лассо.

В Windows 10 диспетчер задач может показать вам совокупное время работы процессора.Просто перейдите на вкладку "История приложений" и "Удалить историю использования".Теперь оставьте все как есть на час или два:

Windows 10 Cumulative CPU time

Чего это НЕ делает, так это разбивки использования в браузерах по вкладкам.Довольно часто неактивные вкладки выполняют огромный объем работы, причем каждая открытая вкладка расходует энергию и замедляет работу вашего компьютера.

Я использую taskinfo для хронологического графика скорости процессора / оперативной памяти / ввода-вывода.http://www.iarsn.com/taskinfo.html

Но вспышки невосприимчивости больше похожи на время прерывания из-за сбоев в работе HD / SS-накопителя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top