Pelaporan kinerja jadi pada svchost.exe

20

Ini adalah sesuatu yang selalu mengganggu saya, jadi saya akan bertanya kepada komunitas Server Fault.

Saya suka Process Explorer untuk melacak lebih dari sekedar tugas tingkat tinggi yang Anda dapatkan di Task Manager . Tapi saya selalu ingin tahu dari selusin layanan yang di-host dalam satu proses di bawah svchost yang membuat prosesor saya lonjakan.

Jadi ... adakah cara yang tidak mengganggu untuk mengetahui informasi ini?

Randolpho
sumber

Jawaban:

34

Ya, ada (hampir) cara yang tidak mengganggu dan mudah:

Bagi setiap layanan untuk dijalankan dalam proses SVCHOST.EXE sendiri dan layanan yang menggunakan siklus CPU akan mudah terlihat di 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
4
wow, solusi luar biasa +1
Matt Simmons
2
Untuk poster yang merekomendasikan skrip PowerShell: Saya mencobanya dan berhasil mengubah semua layanan saya. Namun, saat reboot kotak galat muncul dan restart dimulai. Saya harus memulihkan dengan 'konfigurasi bagus terakhir'. Hati-hati.
user42670
1
@ Chris: Ini dilindungi dari gangguan pada versi Windows yang lebih baru; Saya kira ini penting di Windows XP, ...
Tamara Wijsman
2
@ChrisS Terima kasih atas tautannya ke daftar yang tetap dibagikan! Situs itu sekarang tampaknya sudah mati. Per Arsip , daftarnya adalah: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(semuanya terkait dengan lsass.exe)
cxw
2

Meskipun saya tidak tahu cara mudah untuk melakukannya secara langsung, Anda sering dapat menyimpulkannya dari halaman properti Process Explorer untuk proses svchost. Tab Layanan pada properti proses akan memberi tahu Anda layanan mana yang dihosting dalam proses itu. Dan tab Threads akan menunjukkan kepada Anda thread dan tumpukan thread berjalan serta penggunaan CPU mereka. Seringkali Alamat Mulai pada utas akan memberikan indikasi DLL titik masuk, dan dengan perluasan layanan, yang berjalan pada utas itu. Lain kali Anda dapat melihat thread callstack dan akan melihat nama modul di tumpukan panggilan yang memberi tahu Anda bagian kode mana yang sedang berjalan.

Kevin Dente
sumber
1

Coba alat Pengungkapan Layanan . Saya t:

  1. Menyimpan layanan yang berbagi proses svchost.exe.
  2. Mengkonfigurasi layanan untuk dijalankan dalam proses terpisah. Setelah reboot Anda akan melihat setiap layanan dalam proses terpisah.
  3. Mengembalikan semua yang disimpan pada layanan langkah # 1 kembali ke satu proses.

Komentar dan saran Anda dipersilakan.

@Peter Mortensen: Terima kasih atas gagasannya.

Dmytro Ovdiienko
sumber
1
Dmytro, di mana saya bisa belajar cara menggunakan alat Pengungkapan Layanan Anda? Saya mengunduh dan menjalankan service_disclosure.exe di Windows 7. Secara singkat saya melihat jendela perintah hitam terbuka dan tertutup, tetapi sepertinya tidak ada lagi yang terjadi. Ini membingungkan! Saya ingin tahu apa yang terjadi pada komputer saya dan bagaimana cara menggunakan alat dengan benar.
DeveloperDan
Hai Dan. Silakan pertimbangkan panduan ini selangkah demi selangkah ( sourceforge.net/p/svcdisclsr/wiki/Home )
Dmytro Ovdiienko
1

Perhatian: Silakan lakukan penelitian yang diperlukan, titik pemulihan dan prosedur pencadangan sebelum menerapkan ini, serta periksa apakah semuanya masih berfungsi setelahnya. Dimungkinkan untuk memulihkan dari ini melalui Lingkungan Pemulihan hanya pada sistem non-RAID, serta Mode Aman pada kedua sistem RAID dan non-RAID. Ini telah diuji pada mesin pengembang, bukan pada server.

Di Powershell, Anda bisa melakukan ini untuk semua layanan non-lsass menggunakan perintah berikut:

Get-Service | ForEach-Object `
    { SC.EXE config $_.Name type= own }
ForEach ($svc in @("efs", "keyiso", "netlogon", "policyagent", "samss", "vaultsvc", `
    "was", "w3svc")) `
    { SC.EXE config $svc type= share }

Daftar yang dikecualikan di sini semua harus berjalan di lsass.exe bersama, dengan pengecualian policyagent , yang diperlukan untuk agen kebijakan grup untuk berkomunikasi dengan benar selama boot.

Juga baru-baru menemukan bahwa itu (Proses aktivasi) dan w3svc (IIS World Wide Web) kebutuhan untuk berbagi proses mereka, sehingga mereka telah ditambahkan ke pengecualian.

Ini telah diuji pada Windows 10 (1607, membangun 14.393,953), pengecualian yang berbeda di XP, ... .

Tamara Wijsman
sumber
0

Saya tidak tahu apakah ini masih merupakan pertanyaan yang Anda inginkan jawabannya, tetapi ketika memecahkan kesalahan svchost pelanggan, saya mengetahui bahwa ada baris perintah untuk persis ini: "tasklist / svc" Ini memberikan daftar lengkap proses yang berjalan, dengan ID proses dan layanan setiap proses berjalan. Itu tidak memberikan penggunaan prosesor, tetapi Anda dapat menutup mereka satu proses pada satu waktu dengan ID proses, dan belajar setidaknya kelompok layanan mana yang menyumbat CPU Anda.

Jim B
sumber
0

Saat ini, Anda dapat menggunakan PowerShell untuk mengubah jenis layanan ke "Proses Sendiri" dan melihat memori untuk masing-masing secara individual. Intisari ini menunjukkan kode lengkap. Gagasan utamanya adalah mencoba mengubah jenis layanan dari yang paling tidak mengganggu ke yang paling mengganggu:

$win32Service = Get-CimInstance -ClassName Win32_Service -Filter "Name = '$ServiceName'" -Verbose:$false

if ($win32Service)
{
    if (!(Set-ServiceTypeToOwnProcessByCim $win32Service))
    {
        if (!(Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service))
        {
            if (Grant-FullControlRightsOnServiceRegistryKeyToCurrentUser $win32Service)
            {
                Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service | Out-Null
            }
        }
    }
}
else
{
    Write-Warning "[$ServiceName] Service not found"
}

Saat meletakkan Set-ServiceTypeToOwnProcess.ps1dan Enable-Privilege.ps1file di folder yang sama, Anda dapat menjalankan skrip seperti ini:

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'
Rosberg Linhares
sumber