วิธีการวินิจฉัยการใช้งาน CPU ที่ผิดปกติโดย svchost.exe? [ซ้ำ]


19

ฉันมีแล็ปท็อปที่มีระบบ Win 7 32- บิตขับเคลื่อนโดย Pentium แบบดูอัลคอร์ (เป็นแล็ปท็อปปี 2010) บางครั้งก็ใช้งานได้ดี แต่โดยปกติแล้วมันจะว่างที่โหลด CPU 100% CPU ถูกใช้โดยกระบวนการ svchost.exe สองกระบวนการ (ละ 50%) เท่าที่ฉันเข้าใจนี่เป็นโฮสต์บริการ มีวิธีใดบ้างที่จะทราบว่าบริการใดเป็นผู้กระทำผิด

หมายเหตุ: สิ่งนี้เกิดขึ้นแม้ในเซฟโหมด


1
คุณสามารถใช้กระบวนการ Explorer เพื่อดูที่บริการที่มีการทำงานภายใต้สองกรณีของ Svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik

@Yorik: ฉันคิดอย่างนั้น แต่ ProcessExplorer ไม่พบการใช้งาน
Violet Giraffe

5
ใน Windows 7 ฉันจะบอกว่าปัจจุบัน> 90% ของปัญหา svchost CPU เกี่ยวข้องกับบริการ Windows Update หากคุณมีปัญหาในการทำให้ระบบเป็นปัจจุบัน (ซึ่งอาจเป็นเรื่องยากในการติดตั้งใหม่ด้วยโปรเซสเซอร์เก่า) ให้ลองติดตั้ง KB3050265, KB3138612 และ KB3145739 โดยไม่ต้องเชื่อมต่อเครือข่าย จากนั้นรีบูตและค้นหาการอัปเดต
ontrack

@ontrack: น่าสนใจ ที่จริงแล้วฉันคิดว่าการตรวจสอบการอัปเดตถูกปิดใช้งานในเครื่องนี้อาจไม่เคยอัปเดตตั้งแต่ปี 2010 หรือ 2012 และฉันไม่ต้องการติดตั้งการอัปเดตฉันแค่ต้องแก้ไขปัญหา CPU หากคุณพูดถูกการปิดบริการ Windows Update จะช่วยได้อย่างไร
Violet Giraffe

สิ่งนี้ถูกถามหลายครั้ง ดูซ้ำ คุณน่าจะเห็นปัญหาการดื้อรั้นของ WU แก้จากขั้นตอนในคำตอบของฉัน: superuser.com/a/996072/174557
magicandre1981

คำตอบ:


28

ในฐานะที่เป็นตัวอย่างของ svchost.exe โฮสต์บริการหลายระบบนี่คือวิธีการแยกบริการแต่ละอย่างกับ svchost.exe ของตัวเองเพื่อค้นหาบริการที่ใช้ CPU

ขั้นตอนดังต่อไปนี้:

  1. ใช้ตัวจัดการงานเพื่อแสดงกระบวนการทั้งหมดที่เรียงตาม CPU จากมากไปหาน้อยและทำเครื่องหมาย PID ของกระบวนการที่ใช้งาน CPU

  2. ใน Command Prompt (cmd) ให้ป้อนคำสั่ง
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    ป้อนคำอธิบายรูปภาพที่นี่

  3. อินสแตนซ์ที่เป็นปัญหาของ svchost.exe สามารถค้นหาได้จาก PID และทางด้านขวาคุณจะพบรายการบริการของระบบที่โฮสต์

  4. สำหรับแต่ละชื่อในรายการให้ป้อนคำสั่งต่อไปนี้ใน Command Prompt (cmd) ที่เรียกใช้ในฐานะผู้ดูแลระบบ:
    sc config <name> type= own
    (สังเกตช่องว่างระหว่าง '=' และ 'own')

  5. Reboot

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

สำหรับข้อมูลเพิ่มเติมโปรดดูที่บทความไมโครซอฟท์เริ่มต้นกับการแก้ไขปัญหา
svchost.exe


7

Process Explorerทำให้การดำเนินการนี้เป็นเรื่องง่าย ฉันยืนยันว่าสามารถใช้งานได้กับ Process Explorer v16.20 บน Windows 7 Professional 64 บิตและ Windows 10 Pro 64 บิต

  1. เรียกใช้ Process Explorer ที่ได้รับการยกระดับ
  2. ค้นหาsvchost.exeกระบวนการที่มีค่าสูง (หรือแม้แต่ค่าที่วัดได้ / ไม่ว่าง) ในCPUคอลัมน์ การเรียงลำดับตามProcessหรือCPUคอลัมน์อาจช่วยได้
  3. คลิกขวาที่กระบวนการและการเลือกsvchost.exeProperties...
  4. ในหน้าต่างคุณสมบัติกระบวนการเลือกThreadsแท็บ กระทู้ทั้งหมดในกระบวนการนี้จะปรากฏขึ้น
  5. ค้นหาเธรดที่มีค่าสูง (หรืออีกครั้งเพียงแค่ค่าที่วัดได้ / ไม่ว่างเปล่า) ในCPUคอลัมน์ การเรียงลำดับตามCPUคอลัมน์อาจช่วยได้Process Explorer กระบวนการแท็บเธรด
  6. Serviceคอลัมน์จะแสดงชื่อของบริการที่ด้ายที่ใช้

หากชื่อบริการไม่คุ้นเคยกับคุณ ...

  1. ในหน้าต่างคุณสมบัติกระบวนการเลือกServicesแท็บ บริการทั้งหมดที่เรียกใช้ในกระบวนการนี้จะปรากฏขึ้น
  2. จับคู่Serviceคอลัมน์ในServicesแท็บกับค่าของServiceคอลัมน์บนThreadsแท็บที่คุณอยู่ในขั้นตอนที่ 6แท็บ Process Explorer กระบวนการบริการ
  3. Display Nameคอลัมน์จะแสดงชื่อที่เรียกง่ายของการบริการ คำอธิบายของบริการที่เลือกจะปรากฏด้านล่างรายการบริการ

อ่าฉันไม่รู้เกี่ยวกับฟังก์ชั่นขั้นสูงของ Process Explorer ขอบคุณ
Violet Giraffe

3

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

บนแท็บกระบวนการ :

  • ตรวจสอบการแสดงกระบวนการจากผู้ใช้ทั้งหมด
  • คลิกขวาที่กระบวนการ "หัวตาราง" (ที่มีชื่อคอลัมน์เช่นชื่อไฟล์ภาพ , PID , ชื่อผู้ใช้ , CPU , ... ) และเลือกเลือกคอลัมน์ ...
    • เมื่อวันที่โต้ตอบที่ปรากฏขึ้นเลื่อนลงและให้แน่ใจว่าคุณตรวจสอบบรรทัดคำสั่งและPID (กระบวนการ Identifier)แล้วกดOK
  • กลับไปที่แท็บกระบวนการคลิกที่ส่วนหัวคอลัมน์CPUเพื่อให้กระบวนการสั่งโดยปริมาณการใช้ CPU (โปรดทราบว่ากระบวนการอาจแสดงตามลำดับจากน้อยไปมาก / มากไปหาน้อย - คลิกแต่ละครั้งบนCPUสลับคำสั่ง) คลิกจนกระทั่งกระบวนการ 2 ปรากฏที่ด้านบนของตาราง ตอนนี้คุณสามารถเห็นบรรทัดคำสั่งของพวกเขา (ฉันไม่รู้ แต่ฉันรู้สึกว่าหนึ่งในนั้นคือnetsvcs(บริการเครือข่าย)) และ PID ของพวกเขาด้วย

  • ถัดไปคุณต้องจับคู่ 2 กระบวนการกับบริการ เพื่อที่คุณสามารถ:

    • คลิกขวาที่พวกเขาแล้วไปที่การให้บริการ (s) ... สิ่งนี้จะย้ายไปที่แท็บบริการโดยเลือกบริการทั้งหมดที่ทำงานอยู่ในกระบวนการนั้น (สำหรับตัวเลือกนี้คุณไม่จำเป็นต้องทำตามขั้นตอนก่อนหน้านี้ :))
    • เปิดบริการ snapin ในMMC เมื่อคลิกสองครั้งที่บริการหนึ่งครั้ง (ตรวจสอบได้เฉพาะรายการที่กำลังทำงาน) ภายใต้เส้นทางสู่การปฏิบัติการคุณสามารถเห็นบรรทัดคำสั่งที่คุณควรทำการจับคู่
  • บนW10คุณสามารถดูข้อมูลที่แน่นอนที่คุณต้องการจากการตรวจสอบทรัพยากร (คุณสามารถเริ่มต้นได้จากTask Manager , ผลงานของแท็บ) ที่นั่นคุณไปที่แท็บCPUและบริการและปริมาณการใช้ CPU ที่ระบุไว้

EDIT0 : คำตอบที่ได้รับการอัปเดตเพื่อให้วิธีการที่ง่ายขึ้น (และทำให้มีความหมายมากขึ้น) แทนที่จะเกาทางด้านขวาของฉันโดยใช้รูปแบบมือซ้ายของฉันซึ่งฉันโพสต์ครั้งแรก


ฉันไม่เคยสังเกตเห็นคุณสามารถเห็นบรรทัดคำสั่งเรียบร้อย! ไม่ตรงไปตรงมาเหมือนคำตอบของ harrymc แต่ก็ควรรู้
Violet Giraffe

ตัวจัดการงานสามารถทำได้ด้วยตัวเอง หากกระบวนการ svchost ถูกเลือกเมื่อสลับไปยังแท็บบริการบริการที่ทำงานในกระบวนการนั้นจะถูกเลือกที่นั่น
Simon Richter

1
จริงๆ? ในW10สิ่งนี้จะไม่เกิดขึ้น (อย่างน้อยเมื่อมีบริการบางอย่างที่เลือกไว้แล้ว) วิธีเดียวคือโดยการคลิกที่กระบวนการแล้วเลือกไปที่บริการ (ตัวเลือกที่ฉันพลาด - มีโอกาสมากที่มันมีอยู่ในW7ด้วย) น่าเสียดายที่ฉันไม่สามารถตรวจสอบได้
CristiFati

1
@CristiFati ตัวเลือกนี้มีอยู่ตั้งแต่ Windows Vista (แหล่งที่มา: technet.microsoft.com/en-us/library/ff642468.aspx ) คุณควรเพิ่มคำตอบของคุณแทนการจับคู่ PID ด้วยมือ
Vasily Alexeev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.