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


163

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

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

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

Ответы:


167

Просто введите perfmonв Start > Runи нажмите клавишу ВВОД. Когда окно Performance открыто, нажмите на знак +, чтобы добавить новые счетчики на график. Счетчики - это разные аспекты работы вашего ПК, которые по сходству сгруппированы в группы, называемые «Объект производительности».

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

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


1
Какой идеальный интервал для сбора выборки данных в журнале счетчиков?
— Стеф Роуз

8
MS, очевидно, изменил пользовательский интерфейс на PerformanceMonitor, так как вы написали это. Любая идея, как вы делаете это в Windows 2008 R2?
— Мартин Браун

5
@MartinBrown - нашел это . Это отлично
— JNF

2
Кто-нибудь знает, как сделать вторую часть сохранения логов на Vista? Кажется, нигде нет «
— Журналов

11
Щелкните правой кнопкой мыши Data Collector Sets-> User Defined. Выберите New-> Data Collector Set. Дайте ему имя и выберите «Создать вручную». Нажмите кнопку "Далее. Выберите Счетчик производительности. Нажмите кнопку "Далее. Добавьте счетчики производительности и введите интервал выборки. Затем в разделе «Сборщики данных» щелкните правой кнопкой мыши свой набор и нажмите «Пуск». Через некоторое время вы щелкните правой кнопкой мыши свой набор и нажмите «Стоп». Затем вы можете найти отчет в разделе Отчеты-> Пользовательский-> Ваш набор. Щелкните правой кнопкой мыши по графику и выберите «Сохранить данные как».
— Гремио

43

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


3
Итак, как бы вы использовали его, чтобы найти процесс, который случайным образом начинает использовать больше памяти или мощности процессора за короткий промежуток времени. Не могли бы вы уточнить?
— Xitcod13

Щелкните правой кнопкой мыши заголовки столбцов, выберите «Выбрать столбцы», затем выберите «История ЦП» в разделе «Производительность процесса»
— Laurent

Вы можете сбросить его на ноль?
— Simon_Weaver

Могу ли я войти в файл, потребление памяти данным PID?
— Рой

Просто хочу отметить для других пользователей: график ЦП для каждого процесса начинает запись только после того, как вы впервые его открываете, даже если Process Explorer был открыт, поэтому этот метод практически бесполезен для захвата спорадического события и попытки его изолировать в единый процесс. Я укажу, что если вы щелкнете по графику центрального процессора системы (который начинает записываться после открытия Process Explorer) и наведете указатель мыши на любую точку, он покажет процесс, который использовал процессор больше всего в этой точке.
— SUM1

19

Используя perfmon.exe, я попытался использовать счетчик «Private Bytes» в разделе «Process» для отслеживания использования памяти, и он работает хорошо.


1
Это правильный ответ. Вы также можете получить информацию о процессоре в разделе Процесс. Нажмите на Process, затем выберите ваше приложение (Firefox в вашем примере) под экземплярами выбранного объекта.
— Крис

11

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

@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.

7

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

Производительность объекта: проверка процесса «Выберите экземпляры из списка» и выберите Firefox.


1
Спасибо. Как я могу увидеть историю использования процессора за определенное время, например, за час?
— Эли Бендерский

6

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

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


5
Технически perfmon - это интерфейс к основному API-интерфейсу счетчика производительности Windows, который предшествовал WMI на многие годы. WMI также предоставляет API счетчика производительности в своем пространстве имен.
— Роб Уокер

2

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь автором Process Lasso, но на самом деле я не одобряю его здесь - так как есть лучшие решения (perfmon - лучший).

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


2

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

Нам нужно выполнить 2 запроса WMI Select и применить формулу загрузки 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


WMI и Powershell?
— PreguntonCojoneroCabrón

2

Хотя я не пробовал это, ProcDump кажется лучшим решением.

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

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





1

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

Windows 10 совокупное время процессора

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


1

Требовалось получить статус и использование процессора / памяти некоторых конкретных серверов Windows. Я использовал ниже скрипт:

Это пример службы поиска Windows.

  $cpu = Get-WmiObject win32_processor
  $search = get-service "WSearch"
  if ($search.Status -eq 'Running')
  {
  $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'"
  $searchid = $searchmem.ProcessID
  $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  Start-Sleep -Seconds 1
  $searchcpu2 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime
  $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS
  $searchcpu = [Math]::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1)
  $searchmem = [Math]::Round($searchcpu1.WorkingSetPrivate / 1mb,1)
  Write-Host 'Service is' $search.Status', Memory consumed: '$searchmem' MB, CPU Usage: '$searchcpu' %'
  }

  else
  {
  Write-Host Service is $search.Status -BackgroundColor Red
  }

0

Я использую taskinfo для отображения истории скорости CPU / RAM / IO. http://www.iarsn.com/taskinfo.html

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.