จะค้นหาการใช้งานหน่วยความจำของบริการ Windows แต่ละรายการได้อย่างไร


42

ตัวจัดการงานแสดงการใช้งานหน่วยความจำโดยรวมของ svchost.exe มีวิธีดูการใช้หน่วยความจำของแต่ละบริการหรือไม่


หมายเหตุสิ่งนี้คล้ายกับการรายงานประสิทธิภาพ Finegrained ใน svchost.exe


1
สำหรับทุกคน (เช่นฉัน) ที่มีปัญหาเดียวกัน: - ตัวจัดการงานของ Windows -> ประสิทธิภาพ (แท็บ) -> ตัวตรวจสอบทรัพยากร (ปุ่ม) - และคุณจะได้รับการแยก svchost.exe โดยบริการใน Windows 7
Oliver

1
@Oliver Resource Monitor แสดง CPU ต่อบริการ แต่คำถามนี้เกี่ยวกับหน่วยความจำ
Aidan Ryan

คุณสามารถดูสคริปต์เพื่อตรวจสอบหน่วยความจำของแต่ละบริการในคำตอบ SOนี้
Rosberg Linhares

@RosbergLinhares สคริปต์นี้เทียบเท่ากับ PeterMortensen's
Aidan Ryan

@AidanRyan สำหรับฉันสคริปต์ของ PeterMortensen ไม่ได้ทำงานกับบริการ Schedule และ gpsvc
Rosberg Linhares

คำตอบ:


51

มีวิธีที่ง่ายในการรับข้อมูลที่คุณขอ (แต่มันต้องการการเปลี่ยนแปลงเล็กน้อยในระบบของคุณ):

แยกแต่ละบริการเพื่อเรียกใช้ในกระบวนการ SVCHOST.EXE ของตนเองและบริการที่ใช้รอบ CPU จะสามารถมองเห็นได้ง่ายในตัวจัดการงานหรือ Process Explorer (ต้องการพื้นที่หลัง "="):

SC Config Servicename Type= own

ทำสิ่งนี้ในหน้าต่างบรรทัดคำสั่งหรือใส่ไว้ในสคริปต์ BAT จำเป็นต้องมีสิทธิ์ระดับผู้ดูแลระบบและต้องรีสตาร์ทคอมพิวเตอร์ก่อนจึงจะมีผล

สถานะเดิมสามารถคืนค่าได้โดย:

SC Config Servicename Type= share

ตัวอย่าง: เพื่อให้ Windows Management Instrumentation ทำงานใน SVCHOST แยกต่างหาก:

SC Config winmgmt Type= own

เทคนิคนี้ไม่มีผลกระทบใด ๆ ยกเว้นอาจเพิ่มการใช้หน่วยความจำเล็กน้อย และนอกเหนือจากการสังเกตการใช้งาน CPU สำหรับแต่ละบริการแล้วยังทำให้สามารถสังเกตความผิดพลาดของหน้าเดลต้าอัตราการอ่านดิสก์ I / O และอัตราการเขียนดิสก์ I / O สำหรับแต่ละบริการ สำหรับ Process Explorer, เมนูมุมมอง / เลือกคอลัมน์: แท็บประมวลผลหน่วยความจำ / เพจฟอลต์ความผิดพลาด, แท็บกระบวนการประสิทธิภาพ / IO เขียนเดลต้า IO, แท็บกระบวนการประสิทธิภาพ / IO เดลต้าอ่านไบต์ตามลำดับ


ในระบบส่วนใหญ่มีเพียงกระบวนการ 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 $ _. ชื่อประเภท = เจ้าของ}
Tamara Wijsman

1
ที่จริงแล้วฉันมักสังเกตเห็นอินสแตนซ์ 3 หรือ 4 svchost.exeบนระบบ Windows XP ในอันนี้ฉันเห็น 6.
SamB

4
@TomWij: ระวังอย่างยิ่งเมื่อใช้ตัวอย่างนี้ - ถ้าคุณใช้ EFS (Encrypting File System) และตั้งให้type= ownมันอาจทำงานไม่ถูกต้องและคุณจะถูกทิ้งไว้โดยไม่ต้องเข้าถึงไฟล์ใด ๆ ที่เข้ารหัสด้วย (ซึ่งสามารถ เป็นความหายนะถ้าไฟล์ระบบปฏิบัติการที่มีการเข้ารหัส)!
Beau

@Beau: คุณรู้ว่าทำไมชัดเจน?
Tamara Wijsman

2
@ Peter Mortensen: ฉันได้สร้างเครื่องมือการเปิดเผยข้อมูลบริการ 1. เก็บบริการที่ใช้กระบวนการ svchost.exe 2. กำหนดค่าบริการเพื่อให้ทำงานในกระบวนการแยกต่างหาก 3. ส่งคืนทั้งหมดที่เก็บไว้ในบริการขั้นตอนที่ # 1 กลับสู่กระบวนการเดียว ความคิดเห็นและข้อเสนอแนะของคุณยินดีต้อนรับ ขอบคุณสำหรับความคิด
Dmytro Ovdiienko

18

คุณสามารถใช้tasklistคำสั่งในตัวและตัวกรองตามชื่อบริการ ( /fiสวิตช์) ตัวอย่างเช่น:

 tasklist /fi "services eq TermService"

เอาท์พุท:

รูปภาพชื่อ PID ชื่อเซสชันเซสชัน # Mem การใช้งาน
========================= ======== ================ = ========== ============
svchost.exe 2940 คอนโซล 0 7.096 K

หากคุณไม่ทราบชื่อคุณสามารถแสดงรายการโดยเรียกใช้คำสั่งนี้:

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

มันแสดงบริการทั้งหมดที่โฮสต์โดย svchost.exe ตัวอย่างเช่น:

บริการชื่อ PID
========================= ======== ================= ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
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, กำหนดการ, 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
ดูเหมือนจะไม่แสดงหน่วยความจำที่ใช้โดยบริการส่วนบุคคลตามที่ร้องขอในคำถาม
Duncan Jones

9

Process explorer จะแสดงการใช้งานหน่วยความจำส่วนบุคคลให้คุณภายใน svchost ตรวจสอบให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดจากที่นี่http://technet.microsoft.com/en-us/sysinternals/bb896653

ตรวจสอบให้แน่ใจว่าได้เรียกใช้ Process Explorer ในฐานะผู้ดูแลระบบคลิกที่ svchost ที่คุณต้องการตรวจสอบคลิกView DLLsปุ่ม (หรือCTRL+D) คลิกขวาที่ส่วนหัวในหน้าต่างที่กำลัง, Select Columns...แล้วตรวจสอบและตีWS Total BytesOK

ตอนนี้คุณสามารถดูและเรียงลำดับการใช้หน่วยความจำของแต่ละบริการ (ถูกใช้งานโดย dlls) ภายใน svchost


4
มันไม่แสดงขนาดฮีป
Der_Meister

7

ในขณะที่ Process Monitor เป็นยูทิลิตี้เอนกประสงค์ (ที่จะทำทุกอย่างยกเว้นล้างจานให้คุณ) สำหรับคำถามเฉพาะนี้ที่คุณต้องการใช้ VMMap (ยูทิลิตี้ SysInternals อื่น)

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

VMMap เป็นยูทิลิตี้การวิเคราะห์หน่วยความจำเสมือนจริงและกระบวนการ มันแสดงให้เห็นถึงการแบ่งประเภทของหน่วยความจำเสมือนที่มุ่งมั่นของกระบวนการรวมทั้งจำนวนหน่วยความจำกายภาพ (ชุดการทำงาน) ที่กำหนดโดยระบบปฏิบัติการให้กับประเภทเหล่านั้น นอกจากการใช้หน่วยความจำแบบกราฟิกแล้ว VMMap ยังแสดงข้อมูลสรุปและแผนที่หน่วยความจำกระบวนการโดยละเอียด ความสามารถในการกรองและรีเฟรชที่มีประสิทธิภาพช่วยให้คุณสามารถระบุแหล่งที่มาของการใช้หน่วยความจำกระบวนการและต้นทุนหน่วยความจำของฟีเจอร์แอปพลิเคชัน

นอกจากมุมมองที่ยืดหยุ่นสำหรับการวิเคราะห์กระบวนการถ่ายทอดสด VMMap ยังสนับสนุนการส่งออกข้อมูลในหลายรูปแบบรวมถึงรูปแบบดั้งเดิมที่เก็บรักษาข้อมูลทั้งหมดเพื่อให้คุณสามารถโหลดกลับมาได้อีกทั้งยังมีตัวเลือกบรรทัดคำสั่งที่เปิดใช้งานสถานการณ์การสคริปต์


5
เย็น! ตอนนี้มีวิธีติดตามการใช้บล็อกหน่วยความจำฮีปกับบริการส่วนบุคคลที่เป็นเจ้าของหรือไม่
Aidan Ryan

3

นี่คือการเข้าสู่อาณาเขตของสแต็คโอเวอร์โฟลว์ แต่ถ้าคุณสามารถเก็บสถิติหน่วยความจำต่อเธรดได้คุณอาจสามารถเชื่อมโยงกับบริการของแต่ละบุคคลได้ แม้ว่าจะมากเกินไปสำหรับสมองดูแลระบบเล็ก ๆ ของฉัน


2

ฉันขยายคำตอบของ Peter Mortensen ที่นี่ ก่อนที่จะแก้ไขประเภทของบริการโปรดตรวจสอบประเภทที่มีอยู่ตามคำสั่งเช่น:

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)

คุณสามารถทำได้ผ่านรีจิสตรีซึ่งหมายถึงการตั้งค่าพารามิเตอร์ "Type" เป็น 0x00000010 (ธันวาคม 16):

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

โปรดระวังว่าบริการใดที่คุณเลือกที่จะแก้ไขมีประเภทพิเศษนอกเหนือจาก "เจ้าของ" และ "แบ่งปัน" ที่ไม่ควรเปลี่ยนแปลงเช่น:

  • เมล็ด
  • filesys
  • REC
  • ปรับ

หลังจากนั้นเพียงแค่เริ่มบริการใหม่และคุณควรเห็นใน ProcessExplorer ว่าตอนนี้มีกระบวนการ svchost.exe ของตัวเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.