Відстеження використання процесора та пам'яті за процес


163

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

Чи існує спосіб (у Windows) відстежити історію використання процесора та пам'яті для певного процесу. Наприклад, я почну відстежувати "firefox", а через годину або близько того побачу графік його використання процесора та пам'яті протягом цієї години.

Я шукаю або готовий інструмент, або програмний спосіб досягти цього.

Відповіді:


167

Просто введіть perfmonвStart > Run і натисніть клавішу ENTER. Коли відкриється вікно «Продуктивність», натисніть знак +, щоб додати до лічильника нові лічильники. Лічильники - це різні аспекти роботи вашого ПК та об'єднані за подібністю в групи, які називаються "Об'єкт продуктивності".

Для своїх питань ви можете вибрати об'єкти продуктивності "Процес", "Пам'ять" та "Процесор". Потім ви можете побачити ці лічильники в режимі реального часу

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


1
Який ідеальний інтервал для захоплення вибірки даних у лічильник журналів?
Стефа Роза

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

5
@MartinBrown - знайшов це . Це чудово.
JNF

2
хтось знає, як зробити другу частину збереження журналу на Vista? Здається, ніде не
існують

11
Клацніть правою кнопкою миші Набори колектора даних-> Визначено користувачем. Виберіть Нове-> Набір колектора даних. Дайте ім’я та виберіть Створити вручну. Клацніть Далі. Виберіть лічильник ефективності. Клацніть Далі. Додайте лічильники ефективності та введіть інтервал вибірки. Потім у розділі "Збір даних" ви клацнете правою кнопкою миші ваш набір і натисніть "Пуск". Через деякий час ви клацніть правою кнопкою миші ваш набір і натисніть "Зупинити". Тоді ви можете знайти звіт у розділі Звіти-> Визначено користувачем-> Ваш набір. Клацніть правою кнопкою миші графік і виберіть Зберегти дані як.
Греміо

43

Провідник процесів може показувати загальний час процесора, зайнятий процесом, а також графік історії за процес.


3
Отже, як би ви використовували його для пошуку процесу, який випадковим чином починає використовувати більше пам'яті або потужності процесора за короткий час. Не могли б ви детальніше?
Xitcod13

Клацніть правою кнопкою миші на заголовках стовпців, виберіть «Вибрати стовпці», після чого поставте галочку «Історія процесора» у розділі «Ефективність процесу»
Лоран

ви можете скинути його до нуля?
Simon_Weaver

Чи можу я увійти у файл, який займає пам'ять даного PID?
Рой

Просто хотілося вказати на інших користувачів: графік процесора для кожного процесу починається запис лише після того, як ви відкриєте його вперше, навіть якщо було відкрито Провідник процесів, тому цей метод практично марний для фіксації спорадичної події та спроби ізолювати її. до єдиного процесу. Я зазначу, що якщо натиснути графік глобального системного процесора (який починається запис після відкриття Explorer Explorer) і навести курсор миші на будь-яку точку, він покаже процес, який найбільше використовував ЦП у цьому пункті.
СУМ

19

Використовуючи perfmon.exe, я спробував використовувати лічильник "Приватні байти" під лічильниками "Обробити" для відстеження використання пам'яті, і він працює добре.


1
Це правильна відповідь. Ви також можете отримати інформацію про процесор у процесі Process. Клацніть на «Обробити», а потім виберіть додаток (Firefox у вашому прикладі) під екземплярами вибраного об’єкта.
Chris

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 - це інтерфейс графічного інтерфейсу для цього інтерфейсу, який може контролювати процес, записувати інформацію в журнал та дозволяє аналізувати журнал після факту. Це не найелегантніша у світі програма, але вона справді виконує роботу.


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

2

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

ВІДПОВІДАЛЬНІСТЬ: Я є автором Process Lasso, але насправді не схвалюю його тут, оскільки є кращі рішення (найкраще парфуми).

Найкраще, що коли-небудь - це Windows Vista + Монітор ресурсів та продуктивності. Він може відслідковувати використання процесорів, пам'яті, мереж та дисків процесами з часом. Це велика загальна інформаційна утиліта системи, яка мала бути створена давно. Якщо я не помиляюся, він може відслідковувати використання процесора та використання пам’яті за певний процес (серед інших перерахованих речей).


2

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

Нам потрібно виконати 2 запити вибору WMI і застосувати формулу використання CPU%

1. Отримати загальну кількість логічного процесу

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Для отримання значень PercentProcessorTime, TimeStamp_Sys100NS (застосована формула використання процесора, отримуйте фактичний відсоток використання) та WorkingSetPrivate (ОЗУ) мінімум 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 для історії графіка швидкості процесора / оперативної пам’яті / вводу-виводу. http://www.iarsn.com/taskinfo.html

Але сплески невідповідальності, більше нагадують час перерви через несправний диск HD / SS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.