Tek tek Windows hizmetlerinin bellek kullanımını nasıl bulabilirim?


42

Görev Yöneticisi svchost.exe genel bellek kullanımını gösterir. Bireysel servislerin hafıza kullanımını görmenin bir yolu var mı?


Bunun svchost.exe'deki Finegrained performans raporlamasına benzer olduğunu unutmayın.


1
Aynı sorunu olan (benim gibi) herkes için: - Windows Görev Yöneticisi -> Performans (sekme) -> Kaynak monitör (düğme) - Ve Windows 7'de hizmeti tarafından svchost.exe bölünmüş olsun
Oliver

1
@Oliver Resource Monitor hizmet başına CPU gösterir, ancak bu soru Bellek ile ilgilidir.
Aidan Ryan,

Bu SO cevabındaki bireysel servislerin hafızasını kontrol etmek için bir komut dosyası görebilirsiniz .
Rosberg Linhares

@RosbergLinhares bu senaryo PeterMortensen's ile eşdeğerdir
Aidan Ryan

@AidanRyan, benim için PeterMortensen senaryosu Schedule ve gpsvc servisleri ile çalışmadı.
Rosberg Linhares

Yanıtlar:


51

İstediğiniz bilgileri almanın kolay bir yolu var (ancak sisteminizde küçük bir değişiklik yapılması gerekiyor):

Her bir hizmeti kendi SVCHOST.EXE işleminde çalışacak şekilde bölme ve CPU döngülerini tüketen hizmet Görev Yöneticisi'nde veya İşlem Gezgini'nde kolayca görülebilir ("=" sonrası boşluk gerekir):

SC Config Servicename Type= own

Bunu bir komut satırı penceresinde yapın veya bir BAT komut dosyasına koyun. Yönetici ayrıcalıkları gerekir ve yürürlüğe girmeden önce bilgisayarın yeniden başlatılması gerekir.

Orijinal durum şu şekilde geri yüklenebilir:

SC Config Servicename Type= share

Örnek: Windows Yönetim Araçları'nın ayrı bir SVCHOST.EXE içinde çalışmasını sağlamak için:

SC Config winmgmt Type= own

Bu tekniğin, belki de bellek tüketimini biraz arttırması dışında, hiçbir kötü etkisi yoktur. Ayrıca her servis için CPU kullanımının gözlenmesi dışında, sayfa arızalarında delta, disk G / Ç okuma oranı ve her servis için disk G / Ç yazma oranının izlenmesini de kolaylaştırır. İşlem Gezgini için, Menü Sütunları Görüntüle / Seç: sekmesi Bellek İşlem / Sayfa Hatası Delta, sekme İşlem Performansı / IO Delta Yazma Baytları, sekme İşlem Performansı / IO Delta Okuma Baytları sekmesi.


Çoğu sistemde, birçok hizmeti olan yalnızca bir SVCHOST.EXE işlemi vardır. Bu sırayı kullandım (doğrudan komut satırı penceresine yapıştırılabilir):

rem  1. "Automatic Updates"
SC Config wuauserv Type= own

rem  2. "COM+ Event System"
SC Config EventSystem Type= own

rem  3. "Computer Browser"
SC Config Browser Type= own

rem  4. "Cryptographic Services"
SC Config CryptSvc Type= own

rem  5. "Distributed Link Tracking"
SC Config TrkWks Type= own

rem  6. "Help and Support"
SC Config helpsvc Type= own

rem  7. "Logical Disk Manager"
SC Config dmserver Type= own

rem  8. "Network Connections"
SC Config Netman Type= own

rem  9. "Network Location Awareness"
SC Config NLA Type= own

rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own

rem 11. "Secondary Logon"
SC Config seclogon Type= own

rem 12. "Server"
SC Config lanmanserver Type= own

rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own

rem 14. "System Event Notification"
SC Config SENS Type= own

rem 15. "System Restore Service"
SC Config srservice Type= own

rem 16. "Task Scheduler"
SC Config Schedule Type= own

rem 17. "Telephony"
SC Config TapiSrv Type= own

rem 18. "Terminal Services"
SC Config TermService Type= own

rem 19. "Themes"
SC Config Themes Type= own

rem 20. "Windows Audio"
SC Config AudioSrv Type= own

rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own

rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own

rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own

rem 24. "Workstation"
SC Config lanmanworkstation Type= own

rem End.

12
PowerShell kullanıcıları için: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE yapılandırma $ _. Ad türü = own}
Tamara Wijsman

1
Aslında, genellikle svchost.exeWindows XP sistemlerinde 3 veya 4 örnek görüyorum . Bu kez ben 6. bakınız
SAMB

4
@TomWij: Bu pasajı kullanırken çok dikkatli olun - eğer EFS kullanıyorsanız (Şifreleme Dosya Sistemi) ve onu ayarlarsanız, type= owndoğru çalışmayabilir ve şifrelenmiş dosyalara erişiminiz kalmayacak ( işletim sistemi dosyaları şifreli ise felaket olabilir!)
Beau

@Beau: Nedenini açıkça biliyor musun?
Tamara Wijsman 13:11

2
@Peter Mortensen: Servis Açıklaması aracını yarattım . It 1. svchost.exe işlemini paylaşan hizmetleri depolar. 2. Ayrı bir işlemde çalışacak hizmetleri yapılandırın. 3. # 1 numaralı servislerde saklananların hepsini bir prosese geri döndürür. Yorumlarınız ve önerileriniz açıktır. Fikir için teşekkürler.
Dmytro Ovdiienko

18

Yerleşik tasklistkomutu ve filtreyi servis adına ( /fianahtar) göre kullanabilirsiniz, örneğin:

 tasklist /fi "services eq TermService"

Çıktı:

Resim Adı PID Oturum Adı Oturum # Mem Kullanım
=================================================== = =====================================
svchost.exe 2940 Konsol 0 7.096 K

Bir isim bilmiyorsanız, bu ifadeyi çalıştırarak bunları listeleyebilirsiniz:

 tasklist /svc /fi "imagename eq svchost.exe"

Örneğin svchost.exe tarafından barındırılan tüm hizmetleri listeler:

Resim Adı PID Servisleri
=============================================================================== ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Tarayıcı, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Program, seklogon,
                                   SENS, ShellHWDetection, TrkWks, winmgmt,
                                   WuaCerv, WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 RemoteRegistry
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

Hizmetler mutlaka tarafından barındırılmaz svchost.exe. Bu nedenle, yürüten dosya adına göre filtreleme yapan bir servis bulamazsanız, çalıştırın tasklist /svc. Tüm hizmetleri gösterecektir.


6
Bu, soruda istendiği gibi bireysel bir servis tarafından kullanılan hafızayı göstermiyor gibi görünüyor.
Duncan Jones

9

Süreç kaşif gerçekten sen svchost içindeki tek tek bellek kullanımı buradan son sürümüne sahip olun gösterecektir http://technet.microsoft.com/en-us/sysinternals/bb896653

İşlem Gezgini'ni yönetici olarak çalıştırdığınızdan emin olun, incelemek istediğiniz svchost View DLLstuşunu tıklayın, (veya CTRL+D) düğmesini tıklayın . DLL penceresindeki başlıkları sağ tıklayın Select Columns..., ardından kontrol edin WS Total Bytesve vurun OK.

Artık svchost içindeki bireysel servislerin (dlls tarafından uygulanan) bellek kullanımını görüntüleyebilir ve sıralayabilirsiniz.


4
Öbek boyutu göstermez.
Der_Meister

7

Proses Monitor genel amaçlı bir yardımcı program olsa da (sizin için bulaşıkları yıkamak yerine her şeyi yapacak), bu özel soru için VMMap (başka bir SysInternals yardımcı programı) kullanmak istiyorsunuz.

http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

VMMap bir işlem sanal ve fiziksel bellek analiz aracıdır. Bir işlemin taahhüt edilen sanal bellek türlerinin yanı sıra, işletim sistemi tarafından bu türlere atanan fiziksel bellek (çalışma kümesi) miktarını gösterir. Bellek kullanımının grafiksel gösterimlerinin yanı sıra, VMMap ayrıca özet bilgileri ve detaylı bir işlem belleği haritası da gösterir. Güçlü filtreleme ve yenileme yetenekleri, işlem belleği kullanımı kaynaklarını ve uygulama özelliklerinin bellek maliyetini belirlemenizi sağlar.

Canlı işlemleri analiz etmek için esnek görünümlerin yanı sıra VMMap, tüm bilgileri geri yükleyebilmeniz için koruyan yerel bir biçim de dahil olmak üzere birden çok biçimde verilerin dışa aktarılmasını destekler. Ayrıca komut dosyası senaryoları sağlayan komut satırı seçeneklerini de içerir.


5
Güzel! Şimdi bir yığın bellek bloğunun kullanımını, kendisine ait olan bireysel servise izlemenin bir yolu var mı?
Aidan Ryan,

3

Bu, yığın akışı akış alanına giriyor, ancak iş parçacığı başına düşen bellek istatistiklerini elde edebiliyorsanız, bunları iş parçacığı yığınında listelenen parçalarla eşleştirerek tek tek hizmet borçlarıyla kabaca ilişkilendirebilirsiniz. Yine de minik sysadmin beynim için çok fazla.


2

Peter Mortensen'in cevabını burada genişletiyorum. Hizmet türlerini değiştirmeden önce, lütfen aşağıdaki komutu kullanarak mevcut türü kontrol edin:

sc query wuauserv

Aşağıdakilerden hangisini çıkaran:

    TYPE               : 20  WIN32_SHARE_PROCESS
    STATE              : 1  STOPPED
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

"10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" dışındaki herhangi bir tür değiştirilmemelidir.


1

Servisleri ayırmak doğru cevap, ancak sc config komutu benim için işe yaramadı (2008 R2).

Ancak, kayıt defteri aracılığıyla bunu yapabilirsiniz; bu, "Type" parametresini 0x00000010 (16) olarak ayarlamak anlamına gelir:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<ServiceName>\Type

Hangi hizmeti değiştirmeyi seçtiğinize dikkat edin, "sahip olma" ve "paylaşma" dışında, değiştirilmemesi gereken özel türler vardır:

  • çekirdek
  • filesys
  • rec
  • adapte olmak

Ondan sonra, sadece hizmeti yeniden başlatın ve ProcessExplorer'da kendi svchost.exe işlemine sahip olduğunu görmelisiniz.

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.