Назад | Перейти на главную страницу

Как узнать использование памяти отдельными службами Windows?

Диспетчер задач показывает общее использование памяти svchost.exe. Есть ли способ просмотреть использование памяти отдельными службами?


Обратите внимание, это похоже на Подробный отчет о производительности svchost.exe

Есть простой способ получить запрашиваемую информацию (но для этого нужно немного изменить вашу систему):

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

SC Config Servicename Type= own

Сделайте это в окне командной строки или поместите в сценарий BAT. Требуются права администратора и перезагрузка компьютера, прежде чем она вступит в силу.

Исходное состояние можно восстановить:

SC Config Servicename Type= share

Пример: чтобы заставить Windows Management Instrumentation работать в отдельном файле SVCHOST.EXE:

SC Config winmgmt Type= own

Этот метод не имеет вредных последствий, за исключением, возможно, небольшого увеличения потребления памяти. И помимо наблюдения за использованием ЦП для каждой службы, он также упрощает наблюдение за дельтой ошибок страниц, скоростью чтения дискового ввода-вывода и скоростью записи дискового ввода-вывода для каждой службы. Для Process Explorer: меню View / Select Columns: вкладка Process Memory / Page Fault Delta, вкладка Process Performance / IO Delta Write Bytes, вкладка Process Performance / IO Delta Read Bytes соответственно.


В большинстве систем есть только один процесс 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.

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

 tasklist /fi "services eq TermService"

Вывод:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
svchost.exe                   2940 Console                    0      7.096 K

Если вы не знаете имени, вы можете перечислить их, выполнив эту инструкцию:

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

В нем перечислены все службы, размещенные svchost.exe, например:

Image Name                     PID Services
========================= ======== ============================================
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, helpsvc,
                                   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. Он покажет все услуги.

Обозреватель процессов действительно покажет вам индивидуальное использование памяти в svchost. Убедитесь, что у вас установлена ​​последняя версия. https://docs.microsoft.com/sysinternals/downloads/process-explorer

Обязательно запустите Process Explorer от имени администратора, щелкните файл svchost, который вы хотите проверить, щелкните значок View DLLs кнопка (или CTRL + D). Щелкните правой кнопкой мыши заголовки в окне DLL, Select Columns..., затем проверьте WS Total Bytes, и ударил OK.

Теперь вы можете просматривать и сортировать использование памяти отдельными службами (реализованными с помощью dll) в файле svchost.

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

https://docs.microsoft.com/sysinternals/downloads/vmmap

VMMap - это утилита для анализа виртуальной и физической памяти процессов. Он показывает разбивку зафиксированных типов виртуальной памяти процесса, а также объем физической памяти (рабочий набор), назначенный операционной системой этим типам. Помимо графического представления использования памяти, VMMap также показывает сводную информацию и подробную карту памяти процесса. Мощные возможности фильтрации и обновления позволяют определять источники использования памяти процессом и стоимость памяти для функций приложения.

Помимо гибких представлений для анализа текущих процессов, VMMap поддерживает экспорт данных в нескольких формах, включая собственный формат, который сохраняет всю информацию, чтобы вы могли загружаться обратно. Он также включает параметры командной строки, которые позволяют создавать сценарии.

Это входит в область stackoverflow, но если вы можете получить статистику памяти для каждого потока, вы сможете приблизительно сопоставить ее с отдельными служебными DLL, сопоставив их с DLL, перечисленными в стеке потоков. Однако это слишком много для моего крошечного мозга сисадмина.

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

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», не должен изменяться.

Разделение служб - правильный ответ, но команда sc config у меня не сработала (2008 R2).

Вы можете сделать это через реестр, что означает установку параметра «Тип» на 0x00000010 (декабрь 16):

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

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

  • ядро
  • filesys
  • rec
  • адаптироваться

После этого просто перезапустите службу, и вы должны увидеть в ProcessExplorer, что теперь у нее есть собственный процесс svchost.exe.