Диспетчер задач показывает общее использование памяти 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
Будьте осторожны, какую бы службу вы ни выбрали, ведь существуют особые типы, помимо "собственных" и "общих", которые не следует изменять, например:
После этого просто перезапустите службу, и вы должны увидеть в ProcessExplorer, что теперь у нее есть собственный процесс svchost.exe.