Báo cáo hiệu suất được tăng cường trên svchost.exe


20

Đây là điều luôn làm phiền tôi, vì vậy tôi sẽ hỏi cộng đồng Server Fault.

Tôi yêu Process Explorer vì đã theo dõi nhiều hơn những nhiệm vụ cấp cao mà bạn nhận được trong Trình quản lý tác vụ . Nhưng tôi liên tục muốn biết trong số hàng tá dịch vụ được lưu trữ trong một quy trình duy nhất dưới dạng Svchost đang làm cho bộ xử lý của tôi tăng đột biến.

Vậy ... có cách nào không xâm phạm để tìm ra thông tin này không?

Câu trả lời:


34

Có, có một cách (gần như) không xâm phạm và dễ dàng:

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 Process Explorer (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.

4
wow, giải pháp tuyệt vời +1
Matt Simmons

2
Đối với người đăng đề xuất tập lệnh PowerShell: Tôi đã thử và nó đã thay đổi tất cả các dịch vụ của tôi. Tuy nhiên, khi khởi động lại, một hộp lỗi xuất hiện và khởi động lại được kích hoạt. Tôi đã phải khôi phục với 'cấu hình tốt cuối cùng'. Hãy cẩn thận.
dùng42670


1
@ChrisS: Chúng được bảo vệ khỏi sự giả mạo trong các phiên bản sau của Windows; Tôi đoán nó quan trọng trong Windows XP, mặc dù ...
Tamara Wijsman

2
@ChrisS Cảm ơn bạn đã liên kết đến danh sách chia sẻ! Trang web đó bây giờ dường như đã chết. Mỗi Lưu trữ , danh sách là: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(tất cả được liên kết với lsass.exe)
cxw

2

Mặc dù tôi không biết cách dễ dàng để thực hiện trực tiếp, nhưng bạn có thể thường xuyên suy luận nó từ trang thuộc tính Process Explorer cho quy trình svchost. Tab Dịch vụ trên thuộc tính quy trình sẽ cho bạn biết dịch vụ nào được lưu trữ trong quy trình đó. Và tab Chủ đề sẽ hiển thị cho bạn các luồng và ngăn xếp luồng đang chạy cũng như việc sử dụng CPU của chúng. Thông thường Địa chỉ bắt đầu trên luồng sẽ đưa ra dấu hiệu của DLL điểm nhập cảnh và bằng cách mở rộng dịch vụ, đó là chạy trên luồng đó. Những lần khác, bạn có thể nhìn vào bảng gọi luồng và sẽ thấy tên mô-đun trong ngăn xếp cuộc gọi cho bạn biết đoạn mã nào đang chạy.


1

Hãy thử 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. Sau khi khởi động lại, bạn sẽ thấy mỗi dịch vụ 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.

@Peter Mortensen: Cảm ơn ý kiến.


1
Dmytro, tôi có thể tìm hiểu cách sử dụng công cụ Tiết lộ Dịch vụ của bạn ở đâu? Tôi đã tải xuống và chạy service_disclenses.exe trên Windows 7. Một thời gian ngắn tôi thấy một cửa sổ lệnh đen mở và đóng, nhưng dường như không có gì xảy ra nữa. Điều này thật đáng kinh ngạc! Tôi muốn biết những gì nó đã làm với máy tính của tôi và làm thế nào để sử dụng công cụ đúng cách.
Nhà phát

Chào Dân. Vui lòng xem xét hướng dẫn từng bước này ( sourceforge.net/p/svcdisclsr/wiki/Home )
Dmytro Ovdiienko

1

Thận trọng: Vui lòng thực hiện các nghiên cứu cần thiết, khôi phục điểm và quy trình sao lưu trước khi áp dụng điều này, cũng như kiểm tra xem mọi thứ vẫn hoạt động sau đó. Có thể khôi phục từ điều này thông qua Môi trường khôi phục chỉ trên các hệ thống không phải RAID, cũng như Chế độ an toàn trên cả hệ thống RAID và không RAID. Điều này đã được thử nghiệm trên một máy phát triển, không phải trên các máy chủ.

Trong Powershell, bạn có thể thực hiện việc này cho tất cả các dịch vụ không phải lsass bằng các lệnh sau:

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 }

Danh sách được loại trừ ở đây tất cả cần phải chạy trong lsass.exe được chia sẻ, ngoại trừ chính sách , được yêu cầu cho tác nhân chính sách nhóm để giao tiếp đúng trong khi khởi động.

Ngoài ra thời gian gần đây phát hiện ra rằng (Process Activation) và w3svc (Wide Web IIS Thế giới) cần phải chia sẻ quá trình của họ, vì vậy họ đã được thêm vào các loại trừ.

Điều này đã được thử nghiệm trên Windows 10 (1607, xây dựng 14.393,953), loại trừ là khác nhau trong XP, ... .


0

Tôi không biết liệu đây có còn là câu hỏi mà bạn muốn có câu trả lời hay không, nhưng trong khi khắc phục lỗi lỗi của khách hàng, tôi đã biết rằng có một dòng lệnh cho chính xác điều này: "tasklist / svc" Nó cung cấp một danh sách đầy đủ các quy trình đang chạy, với ID tiến trình và các dịch vụ mỗi quy trình đang chạy. Nó không cung cấp cách sử dụng bộ xử lý, nhưng bạn có thể đóng từng tiến trình một lần bằng ID tiến trình và tìm hiểu ít nhất nhóm dịch vụ nào đang làm tắc nghẽn CPU của bạn.


0

Ngày nay, bạn có thể sử dụng PowerShell để thay đổi các loại dịch vụ thành "Quy trình riêng" và xem từng bộ nhớ cho từng loại. Gist này hiển thị mã hoàn chỉnh. Ý tưởng trung tâm là cố gắng thay đổi loại dịch vụ từ cách ít xâm phạm nhất sang cách xâm nhập nhất:

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

Khi đặt Set-ServiceTypeToOwnProcess.ps1Enable-Privilege.ps1các tệp trong cùng một thư mục, bạn có thể thực thi tập lệnh như thế này:

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'
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.