Як знайти використання пам'яті окремих служб Windows?


42

Диспетчер завдань показує загальне використання пам'яті svchost.exe. Чи існує спосіб перегляду використання пам'яті окремих служб?


Зауважте, це схоже на Finegrained звітність про ефективність на svchost.exe


1
Для всіх (як я), які мають однакові проблеми: - Диспетчер завдань Windows -> Продуктивність (вкладка) -> Монітор ресурсів (кнопка) - І ви отримаєте svchost.exe розділений сервісом У Windows 7
Олівер

1
@Oliver Resource Monitor показує процесор на послугу, але це питання стосується пам'яті.
Айдан Раян

Ви можете побачити сценарій для перевірки пам’яті окремих служб у цій відповіді ТА .
Росберг Лінхарес

@RosbergLinhares цей сценарій еквівалентний ПітерМортенсену
Айдан Раян

@AidanRyan, для мене сценарій PeterMortensen не працював із службами Schedule та gpsvc.
Розберг Лінхарес

Відповіді:


51

Існує простий спосіб отримати інформацію, яку ви просите (але вона потребує невеликих змін у вашій системі):

Розділіть кожну службу для запуску у своєму власному процесі 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.

12
Для користувачів PowerShell там: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Ім'я типу = власне}
Тамара Війсман

1
Насправді я зазвичай помічаю 3 або 4 екземпляри в svchost.exeсистемах Windows XP. На цьому я бачу 6.
SamB

4
@TomWij: Будьте надзвичайно обережні при використанні цього фрагмента - якщо ви використовуєте EFS (шифрувальну файлову систему) і встановите його, type= ownвін може не працювати належним чином, і ви залишитеся без доступу до будь-яких файлів, зашифрованих із ним (що може бути катастрофічним, якщо файли ОС зашифровані!)
Beau

@Beau: Ви знаєте, чому явно?
Тамара Війсман

2
@ Peter Mortensen: Я створив інструмент розкриття послуг . Він 1. Зберігає сервіси, які поділяють процес svchost.exe. 2. Налаштування служб для запуску в окремий процес. 3. Повертає всі збережені на кроці №1 послуги назад до одного процесу. Ваші коментарі та пропозиції вітаються. Дякую за ідею.
Дмитро Овдієнко

18

Ви можете використовувати вбудовану tasklistкоманду та фільтр за назвою служби ( /fiперемикачем), наприклад:

 tasklist /fi "services eq TermService"

Вихід:

Назва зображення PID Сесія Ім'я Сесія # Використання пам’яті
=================================== ================= = =======================
svchost.exe 2940 Консоль 0 7.096 К

Якщо ви не знаєте імені, ви можете перерахувати їх, запустивши це твердження:

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

У ньому перераховані всі сервіси, розміщені svchost.exe, наприклад:

Ім'я зображення PID Services
===================================================== ============================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcS
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, браузер, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Schedule, 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

Послуги не обов'язково розміщуються svchost.exe. Отже, якщо ви не можете знайти службу фільтрації за виконанням імені файлу, просто запустіть tasklist /svc. Тут будуть показані всі послуги.


6
Здається, це не відображає пам'ять, яку використовує окремий сервіс, як вимагається у запитанні.
Данкан Джонс

9

Провідник процесів дійсно покаже вам індивідуальне використання пам'яті в svchost. Переконайтесь, що ви маєте тут останню версію http://technet.microsoft.com/en-us/sysinternals/bb896653

Не забудьте запустити Провідник процесів як адміністратор, натисніть на svchost, який ви хочете перевірити, натисніть View DLLsкнопку (або CTRL+D). Клацніть правою кнопкою миші заголовки у вікні DLL Select Columns..., а потім перевірте WS Total Bytesта натисніть OK.

Тепер ви можете переглядати та сортувати за використанням пам'яті окремих сервісів (реалізованих dlls) всередині svchost.


4
Він не показує розмір купи.
Der_Meister

7

Хоча Monitor Monitor - це утиліта загального призначення (яка буде робити все, крім миття посуду для вас), для цього конкретного питання ви хочете використовувати VMMap (інша утиліта SysInternals)

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

VMMap - це утиліта аналізу віртуальної та фізичної пам'яті процесу. Він показує розбиття виданих процесів віртуальної пам'яті, а також об'єм фізичної пам'яті (робочого набору), призначеної операційною системою для цих типів. Окрім графічних зображень використання пам'яті, VMMap також показує підсумкову інформацію та детальну карту пам'яті процесу. Потужні можливості фільтрації та оновлення дозволяють ідентифікувати джерела використання оперативної пам’яті та вартість пам’яті функцій програми.

Крім гнучких уявлень для аналізу живих процесів, VMMap підтримує експорт даних у декількох формах, включаючи власний формат, який зберігає всю інформацію, щоб можна було завантажувати назад. Він також включає параметри командного рядка, що дозволяють сценарії сценаріїв.


5
Класно! Тепер є спосіб відстежити використання блоку купи пам'яті до окремої служби, яка їй належить?
Айдан Райан

3

Це потрапляє на територію stackoverflow, але якщо ви зможете зафіксувати статистику пам’яті за кожну нитку, ви зможете приблизно співвіднести це з окремими службовими dlls, зіставивши їх до dll, перелічених у стеку потоків. Хоча занадто багато для мого крихітного мозку сисадміна.


2

Я продовжую відповідь Пітера Мортенсена тут. Перш ніж змінювати тип послуг, будь ласка, перевірте наявний тип за допомогою команди типу:

sc query wuauserv

Що виведе наступні дії:

    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" не слід змінювати.


1

Відокремлення служб є правильною відповіддю, але команда sc config не працювала для мене (2008 R2).

Ви можете це зробити через реєстр, що означає встановити параметр "Тип" на 0x00000010 (16 грудня):

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

Будьте уважні, хоч яку службу ви бажаєте змінити, окрім "власних" та "поділитися", існують спеціальні типи, які не слід змінювати, наприклад:

  • ядро
  • файли
  • рек
  • адаптувати

Після цього просто перезапустіть службу, і ви побачите в ProcessExplorer, що тепер у неї є власний процес svchost.exe.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.