Làm thế nào để tìm cách sử dụng bộ nhớ của các dịch vụ Windows riêng lẻ?


42

Trình quản lý tác vụ hiển thị mức sử dụng bộ nhớ tổng thể của svchost.exe. Có cách nào để xem việc sử dụng bộ nhớ của các dịch vụ riêng lẻ không?


Lưu ý điều này tương tự như báo cáo hiệu suất Finegrained trên svchost.exe


1
Đối với bất kỳ ai (như tôi) có cùng một vấn đề: - Trình quản lý tác vụ Windows -> Hiệu suất (tab) -> Trình theo dõi tài nguyên (nút) - Và bạn nhận được phân tách svchost.exe bởi dịch vụ Trên Windows 7
Oliver

1
@Oliver Resource Monitor hiển thị CPU trên mỗi dịch vụ, nhưng câu hỏi này là về Bộ nhớ.
Aidan Ryan

Bạn có thể thấy một tập lệnh để kiểm tra bộ nhớ của các dịch vụ riêng lẻ trong câu trả lời SO này .
Rosberg Linhares

@RosbergLinhares kịch bản này tương đương với PeterMortensen
Aidan Ryan

@AidanRyan, đối với tôi, kịch bản của PeterMortensen không hoạt động với các dịch vụ Lịch biểu và gpsvc.
Rosberg Linhares

Câu trả lời:


51

Có một cách dễ dàng để có được thông tin bạn yêu cầu (nhưng nó yêu cầu một chút thay đổi đối với hệ thống của bạn):

Tách từng dịch vụ để chạy trong quy trình SVCHOST.EXE của riêng nó và dịch vụ tiêu thụ chu kỳ CPU sẽ dễ dàng hiển thị trong Trình quản lý tác vụ hoặc Trình khám phá quy trình (không gian sau "=" là bắt buộc):

SC Config Servicename Type= own

Làm điều này trong một cửa sổ dòng lệnh hoặc đặt nó vào một tập lệnh BAT. Đặc quyền quản trị là bắt buộc và khởi động lại máy tính là cần thiết trước khi nó có hiệu lực.

Trạng thái ban đầu có thể được khôi phục bằng cách:

SC Config Servicename Type= share

Ví dụ: để làm cho Thiết bị quản lý Windows chạy trong một SVCHOST.EXE riêng biệt:

SC Config winmgmt Type= own

Kỹ thuật này không có hiệu ứng xấu, ngoại trừ có thể tăng tiêu thụ bộ nhớ một chút. Và ngoài việc quan sát việc sử dụng CPU cho từng dịch vụ, nó còn giúp bạn dễ dàng quan sát lỗi trang delta, tốc độ đọc I / O của đĩa và tốc độ ghi I / O của đĩa cho mỗi dịch vụ. Đối với Process Explorer, menu Xem / Chọn Cột: tab Bộ nhớ xử lý / Lỗi trang Delta, tab Hiệu suất xử lý / IO Delta Viết byte, tab Hiệu suất xử lý / IO Delta Đọc byte tương ứng.


Trên hầu hết các hệ thống chỉ có một quy trình SVCHOST.EXE có rất nhiều dịch vụ. Tôi đã sử dụng trình tự này (nó có thể được dán trực tiếp vào cửa sổ dòng lệnh):

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
Đối với người dùng PowerShell ngoài kia: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Name type = own}
Tamara Wijsman

1
Trên thực tế, tôi thường nhận thấy 3 hoặc 4 trường hợp svchost.exetrên các hệ thống Windows XP. Trên cái này tôi thấy 6.
SamB

4
@TomWij: Hãy cực kỳ cẩn thận khi sử dụng đoạn mã này - nếu bạn đang sử dụng EFS (Hệ thống tệp mã hóa) và đặt nó thành type= ownnó có thể không hoạt động chính xác và bạn sẽ bị bỏ lại mà không truy cập vào bất kỳ tệp nào được mã hóa với nó (có thể sẽ là thảm họa nếu các tệp hệ điều hành được mã hóa!)
Beau

@Beau: Bạn có biết tại sao rõ ràng không?
Tamara Wijsman

2
@Peter Mortensen: Tôi đã tạo công cụ Tiết lộ Dịch vụ . Nó 1. Lưu trữ các dịch vụ chia sẻ quá trình svchost.exe. 2. Định cấu hình dịch vụ để chạy trong quy trình riêng biệt. 3. Trả lại tất cả các dịch vụ được lưu trữ ở bước số 1 trở lại một quy trình. ý kiến ​​và đề xuất của bạn đều được chào đón. Cảm ơn ý kiến.
Dmytro Ovdiienko

18

Bạn có thể sử dụng tasklistlệnh và bộ lọc tích hợp theo tên dịch vụ ( /ficông tắc), ví dụ:

 tasklist /fi "services eq TermService"

Đầu ra:

Tên hình ảnh Tên phiên phiên Phiên # Sử dụng Mem
========================= ======== ================ = ========== ============
Svchost.exe 2940 Bảng điều khiển 0 7.096 K

Nếu bạn không biết tên, bạn có thể liệt kê chúng bằng cách chạy câu lệnh này:

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

Nó liệt kê tất cả các dịch vụ được lưu trữ bởi svchost.exe, ví dụ:

Tên hình ảnh Dịch vụ PID
========================= ======== ================= ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcS
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 Lmhosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Trình duyệt, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Lịch trình, 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

Dịch vụ không nhất thiết phải được lưu trữ bởi svchost.exe. Vì vậy, nếu bạn không thể tìm thấy dịch vụ lọc theo tên tệp thực thi, chỉ cần chạy tasklist /svc. Nó sẽ hiển thị tất cả các dịch vụ.


6
Điều này dường như không hiển thị bộ nhớ được sử dụng bởi một dịch vụ riêng lẻ, như được yêu cầu trong câu hỏi.
Duncan Jones

9

Trình thám hiểm quy trình thực sự sẽ hiển thị cho bạn sử dụng bộ nhớ cá nhân trong svchost Đảm bảo bạn có phiên bản mới nhất từ ​​đây http://technet.microsoft.com/en-us/sysi INTERNals / bb896653

Đảm bảo chạy Process Explorer với tư cách quản trị viên, nhấp vào svchost bạn muốn kiểm tra, nhấp vào View DLLsnút (hoặc CTRL+D). Bấm chuột phải vào các tiêu đề trong cửa sổ DLL Select Columns..., sau đó kiểm tra WS Total Bytesvà nhấn OK.

Bây giờ bạn có thể xem và sắp xếp việc sử dụng bộ nhớ của các dịch vụ riêng lẻ (được thực hiện bởi dlls) trong svchost.


4
Nó không hiển thị kích thước đống.
Der_Meister

7

Mặc dù Process Monitor là một tiện ích cho mục đích chung (sẽ làm mọi thứ trừ rửa chén cho bạn), nhưng đối với câu hỏi cụ thể này, bạn muốn sử dụng VMMap (một tiện ích SysIternals khác)

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

VMMap là một tiện ích phân tích bộ nhớ ảo và vật lý quá trình. Nó cho thấy sự cố về các loại bộ nhớ ảo đã cam kết của một quá trình cũng như dung lượng bộ nhớ vật lý (bộ làm việc) được hệ điều hành gán cho các loại đó. Bên cạnh các biểu diễn đồ họa của việc sử dụng bộ nhớ, VMMap cũng hiển thị thông tin tóm tắt và bản đồ bộ nhớ quy trình chi tiết. Khả năng lọc và làm mới mạnh mẽ cho phép bạn xác định các nguồn sử dụng bộ nhớ quá trình và chi phí bộ nhớ của các tính năng ứng dụng.

Bên cạnh các chế độ xem linh hoạt để phân tích các quy trình trực tiếp, VMMap hỗ trợ xuất dữ liệu dưới nhiều hình thức, bao gồm cả định dạng gốc lưu giữ tất cả thông tin để bạn có thể tải lại. Nó cũng bao gồm các tùy chọn dòng lệnh cho phép các kịch bản lệnh.


5
Mát mẻ! Bây giờ có cách nào để theo dõi việc sử dụng một khối bộ nhớ heap cho dịch vụ riêng lẻ sở hữu nó không?
Aidan Ryan

3

Điều này đang xâm nhập vào lãnh thổ stackoverflow, nhưng nếu bạn có thể nắm giữ các số liệu thống kê bộ nhớ trên mỗi luồng, bạn có thể tương quan gần với điều đó với các dll dịch vụ riêng lẻ bằng cách khớp chúng với các dll được liệt kê trong ngăn xếp luồng. Mặc dù vậy, quá nhiều cho bộ não sysadmin nhỏ bé của tôi.


2

Tôi mở rộng câu trả lời của Peter Mortensen ở đây. Trước khi sửa đổi loại dịch vụ, vui lòng kiểm tra loại hiện có bằng lệnh như:

sc query wuauserv

Mà sẽ xuất ra các nội dung sau:

    TYPE               : 20  WIN32_SHARE_PROCESS
    STATE              : 1  STOPPED
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

Bất kỳ loại nào khác ngoài "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" không nên được sửa đổi.


1

Tách các dịch vụ là câu trả lời đúng, nhưng lệnh sc config không hoạt động với tôi (2008 R2).

Bạn có thể thực hiện thông qua sổ đăng ký, điều đó có nghĩa là đặt tham số "Loại" thành 0x00000010 (ngày 16 tháng 12):

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

Hãy cẩn thận mặc dù bạn chọn dịch vụ nào để sửa đổi, có những loại đặc biệt ngoài "sở hữu" và "chia sẻ" không nên thay đổi, như:

  • hạt nhân
  • tập tin
  • rec
  • phỏng theo

Sau đó, chỉ cần khởi động lại dịch vụ và bạn sẽ thấy trong ProcessExplorer rằng giờ đây nó có quy trình svchost.exe của riêng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.