İşlem başına CPU ve Bellek kullanımını izleme


163

Uygulamalarımdan birinin istediğimden daha fazla CPU döngüsü yediğinden şüpheleniyorum. Sorun şu ki, patlamalarda oluyor ve sadece görev yöneticisine bakmak sadece acil kullanım gösterdiğinden bana yardımcı olmuyor.

Bazı işlemler için CPU ve Bellek kullanım geçmişini izlemenin bir yolu var (Windows'ta). Örneğin, "firefox" u izlemeye başlayacağım ve bir saat kadar sonra, o saatteki CPU ve bellek kullanımının bir grafiğini göreceğim.

Bunu başarmak için hazır bir araç veya programlı bir yol arıyorum.

Yanıtlar:


167

Sadece yazın perfmoniçine Start > Runve enter tuşuna basın. Performans penceresi açıldığında, grafiğe yeni sayaçlar eklemek için + işaretini tıklayın. Sayaçlar, bilgisayarınızın nasıl çalıştığının farklı yönleridir ve "Performans Nesnesi" adı verilen gruplara benzerliklerine göre gruplandırılmıştır.

Sorularınız için "İşlem", "Bellek" ve "İşlemci" performans nesnelerini seçebilirsiniz. Daha sonra bu sayaçları gerçek zamanlı olarak görebilirsiniz

Daha sonra incelemeniz için performans verilerini kaydetmek için yardımcı programı da belirtebilirsiniz. Bunu yapmak için soldaki panelden "Performans Günlükleri ve Uyarıları" nı seçin. (Bize yukarıda belirtilen sayaçları sağlayan Sistem Monitörü konsolunun hemen altındadır. Orada değilse, "Dosya"> "Ek bileşen ekle / kaldır" ı tıklayın, Ekle'yi tıklayın ve listeden "Performans Günlükleri ve Uyarıları" nı seçin ".)" Performans Günlükleri ve Uyarıları "ndan" Sayaç Günlükleri "altında yeni bir izleme yapılandırması oluşturun. Ardından sayaçları ekleyebilir, örnekleme hızını, günlük biçimini (ikili veya düz metin) ve günlük konumunu belirleyebilirsiniz.


1
Sayaç günlüğünde veri örneği almak için ideal aralık nedir?
Steph Rose

8
Bunu yazdığınızdan beri MS, kullanıcı arayüzünü PerformanceMonitor olarak değiştirdi. Bunu Windows 2008 R2'de nasıl yaptığınız hakkında bir fikriniz var mı?
Martin Brown

5
@MartinBrown - Bunu buldum . Bu mükemmel.
JNF

2
kimse bir günlüğü vista kaydetme ikinci bölümünü nasıl biliyor? Hiçbir yerde "Performans Günlükleri ve Uyarılar" görünmüyor
Xitcod13

11
Veri Toplayıcı Grupları-> Kullanıcı Tanımlı'yı sağ tıklatın. Yeni-> Veri Toplayıcı Grubu'nu seçin. Bir ad verin ve Manuel olarak oluştur'u seçin. Sonrakine tıkla. Performans sayacı'nı seçin. Sonrakine tıkla. Performans sayaçlarını ekleyin ve örnek aralığını girin. Ardından Veri Toplayıcı Grupları altında kümenizi sağ tıklayın ve "Başlat" ı tıklayın. Bir süre sonra setinize sağ tıklayın ve "Durdur" a tıklayın. Ardından raporu Raporlar-> Kullanıcı Tanımlı-> Kümeniz altında bulabilirsiniz. Grafiği sağ tıklayın ve Verileri Farklı Kaydet'i seçin.
Gremio

43

İşlem Gezgini , bir işlem tarafından alınan toplam CPU süresini ve işlem başına bir geçmiş grafiği gösterebilir.


3
Peki, kısa bir patlamada rastgele daha fazla bellek veya işlemci gücü kullanmaya başlayan bir işlemi bulmak için nasıl kullanabilirsiniz? Detaylandırabilir misiniz?
Xitcod13

Sütun başlıklarına sağ tıklayın, Sütunları Seç'i seçin, ardından "İşlem Performansı" altında "CPU Geçmişi" ni işaretleyin
Laurent

sıfıra sıfırlayabilir misin?
Simon_Weaver

Belirli bir PID'nin bellek tüketimini bir dosyaya kaydedebilir miyim?
Royi

Sadece diğer kullanıcılar için işaret etmek istedim: Her işlem için CPU grafiği, İşlem Gezgini açık olsa bile, ilk kez açtıktan sonra kaydetmeye başlar, bu nedenle bu yöntem, sporadik bir olayı yakalamak ve yalıtmaya çalışmak için neredeyse işe yaramaz tek bir süreç. Küresel sistem CPU grafiğine (İşlem Gezgini'ni açtıktan sonra kaydetmeye başlar) tıklarsanız ve farenizi herhangi bir noktaya getirdiğinizde, bu noktada CPU'yu en çok kullanan işlemi göstereceğini belirteceğim.
SUM1

19

Perfmon.exe kullanarak, bellek kullanımını izlemek için "İşlem" sayaçları altında "Özel Bayt" sayacı kullanarak denedim ve iyi çalışıyor.


1
Bu doğru cevap. İşlemci altında CPU bilgilerini de alabilirsiniz. İşlem'i tıklayın, ardından seçili nesnenin örnekleri altında uygulamanızı (örneğin Firefox) seçin.
Chris McCowan

11

belki bunu kullanabilirsiniz. Sizin için çalışmalı ve belirtilen işlem için işlemci süresini bildirecektir.

@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

Katılıyorum, perfmon.exe izlemek istediğiniz herhangi bir işlem için sayaç (sağ panelde sağ tıklama) eklemenize izin verir.

Performans Nesnesi: İşlem "Listeden örnekleri seçin" ve firefox'u seçin.


1
Teşekkürler. Bir saat gibi önceden tanımlanmış bir süre içinde cpu kullanımının geçmişini nasıl görebilirim?
Eli Bendersky

6

WMI, Windows Yönetim Araçlarıdır ve Windows'un tüm son sürümlerinde yerleşiktir. CPU kullanımı, disk I / O ve bellek kullanımı gibi şeyleri programlı olarak izlemenizi sağlar.

Perfmon.exe, bu arabirimin GUI ön ucudur ve bir işlemi izleyebilir, günlüğe bilgi yazabilir ve olaydan sonra günlüğü analiz etmenize izin verebilir. Bu dünyanın en zarif programı değil, ama işi hallediyor.


5
Teknik olarak perfmon, yıllarca WMI'dan önce gelen Windows Performans Sayacı API'sinin bir arabirimidir. WMI ayrıca performans sayacı API'sını kendi ad alanı içinde gösterir.
Rob Walker

2

Process Lasso daha çok grafikler için değil, proses otomasyonu ve öncelikli sınıf optimizasyonu için tasarlanmıştır. Dedi ki, bu does (grafiğin üzerinde beyaz bir çizgi olarak çizilmiş) teklif işlem başına CPU kullanımı geçmişi ama yok değil her işlem bellek kullanımı geçmişini sunuyoruz.

YASAL UYARI: Process Lasso'nun yazarıyım, ama aslında burada onaylamıyorum - çünkü daha iyi çözümler var (perfmon en iyisi).

Şimdiye kadarki en iyi şey Windows Vista + Kaynak ve Performans İzleyicisi'dir. İşlemler tarafından CPU, Bellek, Ağ ve Disk erişiminin zaman içindeki kullanımını izleyebilir. Uzun zaman önce yaratılmış olması gereken harika bir genel sistem bilgi aracıdır. Yanılmıyorsam, işlem başına CPU ve bellek kullanımını zaman içinde izleyebilir (listelenen diğer şeylerin yanı sıra).


2

Ayrıca WMI Komutlarını kullanarak kullanım verilerini almak için bir C # / Perl / Java betiği kullanmayı deneyebilirsiniz ve bunun için adımlar aşağıdadır.

2 WMI Seçme Sorgusu yürütmeli ve CPU% kullanım formülünü uygulamalıyız

1. Toplam mantıksal işlem sayısını almak için

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. PercentProcessorTime değerlerini almak için, TimeStamp_Sys100NS (CPU kullanım formülü uygulandı, gerçek kullanım yüzdesini elde edin) ve 1 saniyelik uyku aralığıyla minimum 2 kez WorkingSetPrivate (RAM)

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. CPU% kullanım formülünü uygulayın

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

p2 ikinci kez alınan PercentProcessorTime değerini ve p1 ilk kez alınan PercentProcessorTime süresini belirtir, t2 ve t1 TimeStamp_Sys100NS içindir.

Bunun için örnek bir Perl kodu http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/ bağlantısında bulunabilir.

Bu mantık WMI sorgularını destekleyen tüm programlama dilleri için geçerlidir


WMI ve Powershell?
PreguntonCojoneroCabrón

2

Ben bunu denemedim rağmen, ProcDump daha iyi bir çözüm gibi görünüyor.

Siteden açıklama:

ProcDump, birincil amacı CPU ani artışları için bir uygulamayı izlemek ve bir ani yükseliş sırasında bir yöneticinin veya geliştiricinin aniğin nedenini belirlemek için kullanabileceği çökme dökümleri oluşturmak olan bir komut satırı yardımcı programıdır. ProcDump ayrıca asılı pencere izleme (Windows ve Görev Yöneticisi'nin kullandığı aynı pencere asması tanımını kullanarak), işlenmeyen istisna izleme ve sistem performans sayaçlarının değerlerine dayalı dökümler oluşturabilir. Ayrıca, diğer komut dosyalarına yerleştirebileceğiniz genel bir işlem dökümü yardımcı programı olarak da kullanılabilir.





1

Windows 10 altında, Görev Yöneticisi birikimli CPU saatlerini gösterebilir. "Uygulama geçmişi" sekmesine ve "Kullanım geçmişini sil" e gidin. Şimdi bir veya iki saat çalışacak şekilde bırakın:

Windows 10 Toplu CPU zamanı

Bunun YAPMADIĞI, tarayıcılarda kullanımı sekmeye göre ayırmaktır. Çoğu zaman etkin olmayan sekmeler, her açık sekme enerjiyi kullanarak ve bilgisayarınızı yavaşlatırken çok fazla iş yapar.


1

Bazı belirli Windows sunucularının durumunu ve işlemci / bellek kullanımını alma gereksinimi vardı. Aşağıdaki senaryoyu kullandım:

Bu bir Windows Arama Hizmeti örneğidir.

  $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
  }

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.