Bagaimana menemukan penggunaan memori masing-masing layanan Windows?

42

Task Manager menunjukkan penggunaan memori svchost.exe secara keseluruhan. Apakah ada cara untuk melihat penggunaan memori layanan individual?


Catatan ini mirip dengan pelaporan kinerja Finegrained di svchost.exe

Aidan Ryan
sumber
1
Bagi siapa pun (seperti saya) yang memiliki masalah yang sama: - Windows Task Manager -> Performance (tab) -> Monitor sumber daya (tombol) - Dan Anda mendapatkan svchost.exe dibagi dengan layanan Pada Windows 7
Oliver
1
@Oliver Resource Monitor menunjukkan CPU per layanan, tetapi pertanyaan ini tentang Memori.
Aidan Ryan
Anda dapat melihat skrip untuk memeriksa memori layanan individual dalam jawaban SO ini .
Rosberg Linhares
@RosbergLinhares skrip ini setara dengan PeterMortensen
Aidan Ryan
@AidanRyan, bagi saya skrip PeterMortensen tidak berfungsi dengan layanan Schedule dan gpsvc.
Rosberg Linhares

Jawaban:

51

Ada cara mudah untuk mendapatkan informasi yang Anda minta (tetapi itu memang membutuhkan sedikit perubahan pada sistem Anda):

Bagi setiap layanan untuk dijalankan dalam proses SVCHOST.EXE-nya sendiri dan layanan yang menggunakan siklus CPU akan mudah terlihat di Task Manager atau Process Explorer (diperlukan ruang setelah "="):

SC Config Servicename Type= own

Lakukan ini di jendela baris perintah atau letakkan di skrip BAT. Hak administratif diperlukan dan restart komputer diperlukan sebelum mulai berlaku.

Keadaan asli dapat dipulihkan dengan:

SC Config Servicename Type= share

Contoh: untuk membuat Instrumentasi Manajemen Windows dijalankan di SVCHOST.EXE yang terpisah:

SC Config winmgmt Type= own

Teknik ini tidak memiliki efek buruk, kecuali mungkin sedikit meningkatkan konsumsi memori. Dan selain mengamati penggunaan CPU untuk setiap layanan juga memudahkan untuk mengamati kesalahan halaman delta, disk I / O read rate dan disk I / O write rate untuk setiap layanan. Untuk Process Explorer, menu Lihat / Pilih Kolom: tab Process Memory / Page Fault Delta, tab Performance Process / IO Delta Write Bytes, tab Performance Process / IO Delta Read Bytes, masing-masing.


Pada kebanyakan sistem hanya ada satu proses SVCHOST.EXE yang memiliki banyak layanan. Saya telah menggunakan urutan ini (dapat disisipkan langsung ke jendela baris perintah):

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.
Peter Mortensen
sumber
12
Untuk pengguna PowerShell di luar sana: Dapatkan-Layanan | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Tipe nama = milik}
Tamara Wijsman
1
Sebenarnya, saya biasanya melihat 3 atau 4 contoh svchost.exepada sistem Windows XP. Yang ini saya lihat 6.
SamB
4
@TomWij: Jadilah sangat berhati-hati ketika menggunakan potongan ini - jika Anda menggunakan EFS (Encrypting File System) dan set ke type= ownmungkin tidak bekerja dengan benar dan Anda akan ditinggalkan tanpa akses ke file yang dienkripsi dengan itu (yang bisa menjadi bencana jika file OS dienkripsi!)
Beau
@Beau: Apakah Anda tahu mengapa secara eksplisit?
Tamara Wijsman
2
@Peter Mortensen: Saya telah membuat alat Pengungkapan Layanan . Ini 1. Menyimpan layanan yang berbagi proses svchost.exe. 2. Mengkonfigurasi layanan untuk dijalankan dalam proses terpisah. 3. Mengembalikan semua layanan yang tersimpan pada langkah # 1 ke satu proses. Komentar dan saran Anda dipersilakan. Terima kasih atas idenya.
Dmytro Ovdiienko
18

Anda dapat menggunakan tasklistperintah bawaan dan memfilter menurut nama layanan ( /fisakelar), misalnya:

 tasklist /fi "services eq TermService"

Keluaran:

Nama Gambar Sesi Nama PID Sesi # Penggunaan Mem
========================= ======== ================ = = ========== ============
svchost.exe 2940 Konsol 0 7.096 K

Jika Anda tidak tahu nama, Anda bisa mencantumkannya dengan menjalankan pernyataan ini:

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

Ini mencantumkan semua layanan yang di-hosting oleh svchost.exe, misalnya:

Layanan PID Nama Gambar
========================= ======== ================= ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Browser, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Jadwal, seclogon,
                                   SENS, ShellHWDetection, TrkWks, winmgmt,
                                   wuauserv, WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 RemoteRegistry
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

Layanan tidak dihosting oleh svchost.exe. Jadi, jika Anda tidak dapat menemukan layanan pemfilteran dengan nama file yang mengeksekusi, jalankan saja tasklist /svc. Ini akan menampilkan semua layanan.

percikan
sumber
6
Ini tampaknya tidak menunjukkan memori yang digunakan oleh layanan individual, seperti yang diminta dalam pertanyaan.
Duncan Jones
9

Process explorer memang akan menunjukkan penggunaan memori individual dalam svchost. Pastikan Anda memiliki versi terbaru dari sini http://technet.microsoft.com/en-us/sysinternals/bb896653

Pastikan untuk menjalankan Process Explorer sebagai administrator, klik pada svchost yang ingin Anda periksa, klik View DLLstombol (atau CTRL+D). Klik kanan header di jendela DLL Select Columns...,, lalu centang WS Total Bytes, dan tekan OK.

Sekarang Anda dapat melihat dan mengurutkan penggunaan memori layanan individual (diterapkan oleh dll) di dalam svchost.

Chris T.
sumber
4
Itu tidak menunjukkan ukuran tumpukan.
Der_Meister
7

Sementara Process Monitor adalah utilitas tujuan umum (yang akan melakukan segalanya kecuali mencuci piring untuk Anda), untuk pertanyaan khusus ini Anda ingin menggunakan VMMap (utilitas SysInternals lain)

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

VMMap adalah utilitas analisis memori virtual dan fisik proses. Ini menunjukkan kerusakan dari jenis memori virtual yang dilakukan suatu proses serta jumlah memori fisik (set kerja) yang ditetapkan oleh sistem operasi untuk jenis-jenis tersebut. Selain representasi grafis dari penggunaan memori, VMMap juga menunjukkan informasi ringkasan dan detail peta proses memori. Kemampuan penyaringan dan penyegaran yang kuat memungkinkan Anda mengidentifikasi sumber penggunaan memori proses dan biaya memori dari fitur aplikasi.

Selain tampilan fleksibel untuk menganalisis proses langsung, VMMap mendukung ekspor data dalam berbagai bentuk, termasuk format asli yang menyimpan semua informasi sehingga Anda dapat memuat kembali. Ini juga mencakup opsi baris perintah yang memungkinkan skenario skrip.

Sean Earp
sumber
5
Keren! Sekarang apakah ada cara untuk melacak penggunaan blok memori tumpukan ke layanan individu yang memilikinya?
Aidan Ryan
3

Ini masuk ke wilayah stackoverflow, tetapi jika Anda bisa memperoleh statistik memori per-thread, Anda mungkin dapat secara kasar menghubungkannya dengan dll layanan individual dengan mencocokkannya dengan dll yang tercantum dalam tumpukan thread. Terlalu banyak untuk otak sysadmin kecilku.

pengguna2278
sumber
2

Saya menyampaikan jawaban Peter Mortensen di sini. Sebelum memodifikasi jenis layanan, silakan periksa jenis yang ada dengan perintah seperti:

sc query wuauserv

Yang akan menampilkan sebagai berikut:

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

Jenis apa pun selain "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" tidak boleh dimodifikasi.

sken130
sumber
1

Memisahkan layanan adalah jawaban yang benar, tetapi perintah sc config tidak berfungsi untuk saya (2008 R2).

Anda dapat melakukannya melalui registri, yang berarti mengatur parameter "Jenis" ke 0x00000010 (16 Desember):

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

Berhati-hatilah meskipun layanan mana yang Anda pilih untuk diubah, ada jenis khusus selain "milik" dan "bagi" yang tidak boleh diubah, seperti:

  • inti
  • filesys
  • rek
  • menyesuaikan

Setelah itu, cukup restart layanan dan Anda akan melihat di ProcessExplorer bahwa sekarang memiliki proses svchost.exe sendiri.

Michael Böckling
sumber