Melacak penggunaan CPU dan Memori per proses

163

Saya menduga bahwa salah satu aplikasi saya memakan lebih banyak siklus CPU daripada yang saya inginkan. Masalahnya adalah - itu terjadi dalam semburan, dan hanya melihat task manager tidak membantu saya karena hanya menunjukkan penggunaan langsung.

Apakah ada cara (pada Windows) untuk melacak sejarah penggunaan CPU & Memori untuk beberapa proses. Misalnya saya akan mulai melacak "firefox", dan setelah sekitar satu jam akan melihat grafik penggunaan CPU & memorinya selama jam tersebut.

Saya mencari alat yang siap pakai atau cara terprogram untuk mencapai ini.

Eli Bendersky
sumber

Jawaban:

167

Cukup ketik perfmonke dalam Start > Rundan tekan enter. Ketika jendela Kinerja terbuka, klik tanda + untuk menambahkan penghitung baru ke grafik. Penghitung adalah aspek yang berbeda tentang cara kerja PC Anda dan dikelompokkan berdasarkan kesamaan ke dalam kelompok yang disebut "Objek Kinerja".

Untuk pertanyaan Anda, Anda dapat memilih objek kinerja "Proses", "Memori" dan "Prosesor". Anda kemudian dapat melihat penghitung ini secara real time

Anda juga dapat menentukan utilitas untuk menyimpan data kinerja untuk inspeksi Anda nanti. Untuk melakukan ini, pilih "Log Kinerja dan Peringatan" di panel sebelah kiri. (Tepat di bawah konsol Monitor Sistem yang memberi kami penghitung yang disebutkan di atas. Jika tidak ada di sana, klik "File"> "Add / remove snap-in", klik Add dan pilih "Log Kinerja dan Peringatan" di daftar ".) Dari" Log Kinerja dan Peringatan ", buat konfigurasi pemantauan baru di bawah" Log Penghitung ". Kemudian Anda dapat menambahkan penghitung, tentukan laju pengambilan sampel, format log (biner atau teks biasa) dan lokasi log.

Martin08
sumber
1
Berapa interval ideal untuk mengambil sampel data dalam penghitung log?
Steph Rose
8
MS jelas telah mengubah UI menjadi PerformanceMonitor sejak Anda menulis ini. Adakah yang tahu bagaimana Anda melakukan ini di Windows 2008 R2?
Martin Brown
5
@ MartinBrown - Menemukan ini . Ini luar biasa.
JNF
2
ada yang tahu bagaimana melakukan bagian kedua dari menyimpan log on vista? Tampaknya tidak ada "Log Kinerja dan Lansiran" di mana saja
Xitcod13
11
Klik kanan Set Kolektor Data-> Ditetapkan Pengguna. Pilih Baru-> Kumpulan Data Kolektor. Beri nama dan pilih Buat secara manual. Klik Berikutnya. Pilih Penghitung kinerja. Klik Berikutnya. Tambahkan penghitung kinerja dan masukkan interval sampel. Kemudian di bawah Data Collector Sets Anda klik kanan set Anda dan klik "Mulai". Setelah beberapa waktu Anda klik kanan set Anda dan klik "Stop". Kemudian Anda dapat menemukan laporan di bawah Laporan-> Ditetapkan Pengguna-> Perangkat Anda. Klik kanan grafik dan pilih Save Data As.
Gremio
43

Process Explorer dapat menampilkan total waktu CPU yang diambil oleh suatu proses, serta grafik histori per proses.

Niall
sumber
3
Jadi bagaimana Anda menggunakannya untuk menemukan proses yang secara acak mulai menggunakan lebih banyak memori atau daya prosesor dalam waktu singkat. Bisakah Anda menguraikan?
Xitcod13
Klik kanan pada tajuk kolom, pilih Pilih Kolom, lalu centang "Riwayat CPU" di bawah "Performa Proses"
Laurent
dapatkah Anda mengatur ulang ke nol?
Simon_Weaver
Bisakah saya masuk ke file konsumsi memori PID yang diberikan?
Royi
Hanya ingin menunjukkan untuk pengguna lain: grafik CPU untuk setiap proses hanya mulai merekam setelah Anda membukanya pertama kali, bahkan jika Process Explorer terbuka, jadi metode ini praktis tidak berguna untuk menangkap peristiwa sporadis dan mencoba mengisolasinya. untuk satu proses. Saya akan menunjukkan bahwa jika Anda mengklik grafik CPU sistem global (yang mulai merekam saat membuka Proses Explorer) dan mengarahkan mouse Anda ke titik mana pun, itu akan menunjukkan proses yang menggunakan CPU paling banyak pada saat itu.
SUM1
19

Menggunakan perfmon.exe, saya telah mencoba menggunakan penghitung "Private Bytes" di bawah penghitung "Proses" untuk melacak penggunaan memori dan ia bekerja dengan baik.

CppNoob
sumber
1
Ini jawaban yang benar. Anda juga dapat memperoleh informasi CPU dalam Proses. Klik pada Proses, lalu pilih aplikasi Anda (Firefox dalam contoh Anda) di bawah contoh objek yang dipilih.
Chris McCowan
11

mungkin kamu bisa menggunakan ini. Ini akan bekerja untuk Anda dan akan melaporkan waktu prosesor untuk proses yang ditentukan.

@echo off
: Rich Kreider <[email protected]>
: 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.
Kreider kaya
sumber
7

Saya setuju, perfmon.exe memungkinkan Anda untuk menambahkan penghitung (klik kanan pada panel kanan) untuk setiap proses yang ingin Anda pantau.

Objek Kinerja: Periksa Proses "Pilih instance dari daftar" dan pilih firefox.

Ady Romantika
sumber
1
Terima kasih. Bagaimana saya melihat riwayat penggunaan cpu selama waktu yang telah ditentukan, seperti satu jam?
Eli Bendersky
6

WMI adalah Instrumentasi Manajemen Windows, dan ini dibangun ke dalam semua versi Windows terbaru. Ini memungkinkan Anda untuk melacak secara terprogram hal-hal seperti penggunaan CPU, disk I / O, dan penggunaan memori.

Perfmon.exe adalah antarmuka GUI untuk antarmuka ini, dan dapat memantau suatu proses, menulis informasi ke log, dan memungkinkan Anda untuk menganalisis log setelah faktanya. Ini bukan program yang paling elegan di dunia, tapi itu menyelesaikan pekerjaan.

doflynn
sumber
5
Secara teknis perfmon adalah antarmuka ke Windows Performance Counter API yang mendasari yang mendahului WMI selama bertahun-tahun. WMI juga mengekspos penghitung kinerja API dalam ruang namanya.
Rob Walker
2

Process Lasso dirancang lebih untuk otomatisasi proses dan optimasi kelas prioritas, bukan grafik. Yang mengatakan, itu tidak ditawarkan utilisasi CPU sejarah per-proses (ditarik sebagai garis putih pada grafik) tetapi tidak TIDAK menawarkan sejarah pemanfaatan memori per-proses.

PENOLAKAN: Saya adalah penulis Proses Lasso, tetapi saya tidak benar-benar mendukungnya di sini - karena ada solusi yang lebih baik (perfmon menjadi yang terbaik).

Hal terbaik yang pernah ada adalah Windows Vista + Resource dan Monitor Kinerja. Itu dapat melacak penggunaan CPU, Memori, Jaringan, dan Disk mengakses dengan proses dari waktu ke waktu. Ini adalah keseluruhan utilitas sistem informasi yang hebat yang seharusnya telah dibuat sejak lama. Kecuali saya salah, ia dapat melacak CPU per-proses dan pemanfaatan memori dari waktu ke waktu (di antara hal-hal lain yang tercantum).

dyasta
sumber
2

Anda juga dapat mencoba menggunakan skrip C # / Perl / Java untuk mendapatkan data pemanfaatan menggunakan Perintah WMI, dan di bawah ini adalah langkah-langkahnya.

Kita perlu mengeksekusi 2 WMI Select Queries dan menerapkan formula utilisasi CPU%

1. Untuk mengambil jumlah total proses logis

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Untuk mengambil nilai PercentProcessorTime, TimeStamp_Sys100NS (rumus penggunaan CPU telah diterapkan, dapatkan persentase pemanfaatan aktual) dan WorkingSetPrivate (RAM) minimum 2 kali dengan interval tidur 1 detik

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. Terapkan formula pemanfaatan CPU%

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

p2 menunjukkan PercentProcessorTime diambil untuk kedua kalinya, dan p1 menunjukkan PercentProcessorTime diambil untuk pertama kalinya, t2 dan t1 untuk TimeStamp_Sys100NS.

Contoh kode Perl untuk ini dapat ditemukan di tautan http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

Logika ini berlaku untuk semua bahasa pemrograman yang mendukung kueri WMI

Kaarthikeyan
sumber
WMI dan Powershell?
PreguntonCojoneroCabrón
2

Meskipun saya belum mencoba ini, ProcDump sepertinya solusi yang lebih baik.

Deskripsi dari situs:

ProcDump adalah utilitas baris perintah yang tujuan utamanya adalah memonitor aplikasi untuk lonjakan CPU dan menghasilkan crash dumps selama lonjakan yang dapat digunakan oleh administrator atau pengembang untuk menentukan penyebab lonjakan tersebut. ProcDump juga mencakup pemantauan jendela gantung (menggunakan definisi jendela yang sama dengan yang digunakan Windows dan Pengelola Tugas), pemantauan pengecualian yang tidak ditangani dan dapat menghasilkan dump berdasarkan nilai dari penghitung kinerja sistem. Itu juga dapat berfungsi sebagai utilitas dump proses umum yang dapat Anda embed dalam skrip lain.

sean
sumber
1

Hmm, saya melihat bahwa Process Explorer dapat melakukannya, walaupun grafiknya tidak terlalu nyaman. Masih mencari alternatif / cara yang lebih baik untuk melakukannya.

Eli Bendersky
sumber
1

Perfmon.exe dibangun ke dalam windows.

Pengembang SaaS
sumber
1

Anda mungkin ingin melihat Proses Lasso .


sumber
1

Di bawah Windows 10, Task Manager dapat menunjukkan jam CPU kumulatif Anda. Cukup buka tab "Riwayat aplikasi" dan "Hapus riwayat penggunaan". Sekarang biarkan semuanya berjalan selama satu atau dua jam:

Waktu CPU Kumulatif Windows 10

Apa yang TIDAK dilakukan adalah memecah penggunaan di browser dengan tab. Tab yang sering tidak aktif akan melakukan banyak pekerjaan, dengan setiap tab yang terbuka menggunakan energi dan memperlambat PC Anda.

Bryce
sumber
1

Ada persyaratan untuk mendapatkan status dan penggunaan cpu / memori dari beberapa server windows tertentu. Saya menggunakan skrip di bawah ini:

Ini adalah contoh Layanan Pencarian 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
  }
Prosenjit Sen
sumber
0

Saya menggunakan taskinfo untuk grafik histori kecepatan CPU / RAM / IO. http://www.iarsn.com/taskinfo.html

Tapi semburan tidak responsif, terdengar seperti waktu interupsi karena drive HD / SS palsu.

Terrik
sumber