Чітка звітність про ефективність на svchost.exe


20

Це мене завжди турбує, тому я попрошу спільноти серверних помилок.

Я люблю Process Explorer за те, щоб відслідковувати більше, ніж просто завдання на високому рівні, які ви отримуєте в диспетчері завдань . Але мені постійно хочеться знати, хто з тих десятків служб, що розміщуються в одному процесі під svchost , робить свій процесор шипом.

Отже ... чи є якийсь ненав'язливий спосіб знайти цю інформацію?

Відповіді:


34

Так, є (майже) не нав'язливий і простий спосіб:

Розділіть кожну службу для запуску у своєму власному SVCHOST.EXE процесі, і служба, що споживає цикли процесора, буде легко помітна в Провіднику процесів (пробіл після "=" потрібно):

SC Config Servicename Type= own

Зробіть це у вікні командного рядка або введіть його у сценарій BAT. Потрібні адміністративні привілеї та потрібен перезапуск комп’ютера, перш ніж він набуде чинності.

Початковий стан можна відновити:

SC Config Servicename Type= share

Приклад: змусити пристрій управління Windows працювати в окремому SVCHOST.EXE:

SC Config winmgmt Type= own

Ця методика не має поганих наслідків, за винятком, можливо, незначного збільшення споживання пам'яті. Окрім спостереження за використанням процесора для кожної послуги, це також полегшує спостереження за дельтами помилок сторінки, швидкістю зчитування вводу / виводу диска та швидкістю запису вводу / виводу для кожного сервісу. Для Провідника процесів, меню Перегляд / Вибір стовпців: вкладка Процес-пам’ять / Дефект сторінки Дельта, вкладка Ефективність процесу / Блоки запису IO Delta, вкладка Ефективність процесу / Читання байтів IO Delta відповідно.


У більшості систем існує лише один процес SVCHOST.EXE, який має безліч сервісів. Я використав цю послідовність (її можна вставити безпосередньо у вікно командного рядка):

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.

4
ух, приголомшливе рішення +1
Метт Сіммонс

2
До плаката, який рекомендував сценарій PowerShell: Я спробував це, і він успішно змінив усі мої послуги. Однак після перезавантаження з'явилося вікно помилок і було запущено перезапуск. Мені довелося відновити "останню гарну конфігурацію". Будь обережний.
user42670


1
@ChrisS: вони захищені від фальсифікацій у пізніших версіях Windows; Я думаю, що це важливо в Windows XP, хоча ...
Тамара Війсман

2
@ChrisS Дякуємо за посилання на список спільного використання! Зараз сайт, здається, мертвий. Згідно архіву , цей список був: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(всі пов'язані з lsass.exe)
cxw

2

Хоча я не знаю простий спосіб зробити це безпосередньо, ви часто можете зробити це зі сторінки властивостей Process Explorer для процесу svchost. На вкладці Служби у властивостях процесу буде вказано, які служби розміщуються в цьому процесі. І на вкладці "Нитки" будуть показані потоки та нитки потоків, а також їхнє використання процесора. Часто Початкова адреса в потоці вказує точку введення DLL, а розширюючи службу, що працює на цьому потоці. В іншому випадку ви можете переглянути стек виклику потоку і побачити ім'я модуля в стеці виклику, який повідомляє вам, який фрагмент коду працює.


1

Спробуйте інструмент розкриття послуг . Це:

  1. Зберігає послуги, які поділяють процес svchost.exe.
  2. Налаштування служб для запуску в окремий процес. Після перезавантаження ви побачите кожну службу в окремому процесі.
  3. Повертає всі збережені на кроці 1 послуги назад до одного процесу.

Ваші коментарі та пропозиції вітаються.

@ Peter Mortensen: Дякую за ідею.


1
Дмитро, де я можу дізнатися, як користуватися вашим інструментом розкриття послуг? Я завантажив і запустив service_disclosure.exe в Windows 7. Коротко я побачив, що чорне вікно команд відкривається і закривається, але більше нічого, здавалося, не відбулося. Це було неприємно! Я хотів би знати, що це зробило з моїм комп’ютером та як правильно користуватися інструментом.
DeveloperDan

Привіт, Дане.
Розгляньте

1

Попередження: Будь ласка, проведіть необхідні дослідження, відновіть точкові та резервні процедури перед застосуванням, а також перевірте, чи все після цього працює. Відновлюватись цим можна через середовище відновлення лише на системах, що не є RAID, а також у безпечному режимі як для RAID, так і для не RAID систем. Це було перевірено на машині розробника, а не на серверах.

У Powershell ви можете зробити це для всіх послуг, які не належать до лінійки, використовуючи такі команди:

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 }

Список, який виключається тут, повинен запускатися у спільному lsass.exe, за винятком policyagent , який потрібен правильному спілкуванню агента групової політики під час завантаження.

Також нещодавно виявили, що це було (процес активації) та w3svc (IIS World Wide Web) необхідно розділити свої процеси, щоб вони були додані до винятків.

Це було перевірено на Windows 10 (1607, збірки 14393,953), то виключення можуть відрізнятися в XP, ... .


0

Я не знаю, чи це все-таки питання, на яке ви хочете відповісти, але під час усунення помилок svchost клієнта я дізнався, що існує командний рядок саме для цього: "tasklist / svc" Він дає повний перелік запущених процесів, з ідентифікатором процесу та службами, які працює кожен процес. Це не дає процесору використання, але ви можете закривати їх по одному процесу за ідентифікатором процесу та дізнаватися принаймні, яка група послуг засмічує ваш процесор.


0

Сьогодні ви можете за допомогою PowerShell змінити типи послуг на "Власний процес" та переглянути пам'ять для кожного окремо. Цей історія показує повний код. Основна ідея намагається змінити тип послуги з найменш нав'язливого до найбільш нав'язливого:

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

Якщо розмістити файли Set-ServiceTypeToOwnProcess.ps1та Enable-Privilege.ps1файли в одній папці, ви можете виконати такий сценарій:

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.