Bagaimana cara mendiagnosis penggunaan CPU yang tidak normal dengan svchost.exe? [duplikat]

19

Saya punya laptop dengan sistem Win 7 32-bit yang ditenagai oleh Pentium dual-core (ini laptop 2010). Terkadang berfungsi dengan baik, tetapi biasanya idle pada beban CPU 100%. CPU dikonsumsi oleh dua proses svchost.exe (masing-masing 50%). Sejauh yang saya mengerti, ini adalah host layanan. Apakah ada cara untuk mengetahui layanan mana yang menjadi pelakunya?

Catatan: ini terjadi bahkan dalam mode aman.

Violet Giraffe
sumber
1
Anda dapat menggunakan proses explorer untuk melihat pada layanan yang berjalan di bawah dua contoh dari svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik
@ Yorik: Saya memikirkan hal itu, tetapi ProcessExplorer tidak menunjukkan kegunaan apa pun.
Violet Giraffe
5
Di Windows 7, saya akan mengatakan bahwa saat ini> 90% masalah CPU svchost terkait dengan layanan Pembaruan Windows. Jika Anda benar-benar kesulitan mendapatkan sistem yang terbaru (yang mungkin sulit pada instalasi baru dengan prosesor lama), cobalah untuk menginstal KB3050265, KB3138612 dan KB3145739 tanpa koneksi jaringan. Kemudian reboot dan cari pembaruan.
ontrack
@rack: Menarik. Sebenarnya, saya pikir memeriksa pembaruan dinonaktifkan pada mesin ini, mungkin tidak pernah diperbarui sejak 2010 atau 2012. Dan saya tidak punya keinginan untuk menginstal pembaruan, saya hanya perlu memperbaiki masalah CPU. Jika Anda benar, apakah hanya menonaktifkan bantuan layanan Pembaruan Windows?
Violet Giraffe
ini ditanyakan berkali-kali. lihat dup. Anda kemungkinan melihat masalah penyaringan WU. Selesaikan dari langkah-langkah dalam jawaban saya: superuser.com/a/996072/174557
magicandre1981

Jawaban:

28

Sebagai contoh host svchost.exe beberapa layanan sistem, berikut adalah cara memisahkan layanan, masing-masing dengan instans miliknya sendiri svchost.exe, untuk mengetahui layanan mana yang mengkonsumsi CPU.

Prosedurnya adalah sebagai berikut:

  1. Gunakan Task Manager untuk menunjukkan semua proses yang diurutkan berdasarkan CPU menurun dan tandai PID dari proses yang menggunakan CPU

  2. Di Command Prompt (cmd) masukkan perintah
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    masukkan deskripsi gambar di sini

  3. Contoh svchost.exe yang bermasalah sekarang dapat ditemukan oleh PID mereka dan di sebelah kanan Anda akan menemukan daftar layanan sistem yang mereka host

  4. Untuk setiap nama dalam daftar, masukkan perintah berikut dalam Command Prompt (cmd) yang dijalankan sebagai administrator:
    sc config <name> type= own
    (Catat ruang antara '=' dan 'milik')

  5. Mulai ulang

Layanan sistem yang Anda pisahkan sekarang masing-masing akan berjalan dalam instance sendiri svchost.exe dan dapat dilihat di Task Manager di tab Processes. Anda dapat mengklik kanan pada instance dan memilih "Pergi ke Layanan" untuk langsung ke layanan, atau menggunakan lagi perintah daftar tugas.

Untuk informasi lebih lanjut, lihat artikel Microsoft
Memulai dengan Pemecahan Masalah SVCHOST.EXE .

harrymc
sumber
7

Explorer proses membuatnya mudah. Saya telah mengkonfirmasi ini bekerja dengan Process Explorer v16.20 pada 64-bit Windows 7 Professional dan 64-bit Windows 10 Pro.

  1. Jalankan Process Explorer dengan peningkatan.
  2. Temukan svchost.exeproses dengan nilai tinggi (atau bahkan hanya terukur / tidak kosong) di CPUkolom. Penyortiran berdasarkan kolom Processatau CPUdapat membantu dengan ini.
  3. Klik kanan svchost.exeproses dan pilih Properties....
  4. Di jendela properti proses, pilih Threadstab. Semua utas dalam proses ini akan ditampilkan.
  5. Temukan utas dengan nilai tinggi (atau, sekali lagi, hanya dapat diukur / tidak kosong) di CPUkolom. Mengurutkan berdasarkan CPUkolom dapat membantu dengan ini.Process Explorer proses tab Threads
  6. The Servicekolom akan menampilkan nama layanan yang thread yang sedang berjalan.

Jika nama layanan tidak Anda kenal ...

  1. Di jendela properti proses, pilih Servicestab. Semua layanan yang berjalan dalam proses ini akan ditampilkan.
  2. Cocokkan Servicekolom pada Servicestab dengan nilai Servicekolom pada Threadstab yang Anda temukan di langkah 6.Tab Proses proses Layanan Explorer
  3. The Display Namekolom akan menampilkan nama ramah layanan. Deskripsi layanan yang dipilih akan muncul di bawah daftar layanan.
DAGING BABI ASAP
sumber
Ah, saya tidak tahu tentang fungsi-fungsi canggih dari Proses Explorer. Terima kasih.
Violet Giraffe
3

Anda dapat menggunakan Pengelola Tugas . Ada cara lain (baris perintah, atau bahkan menulis beberapa program menggunakan WinAPI ), tetapi saya tidak akan membahasnya di sini. Sebelum melangkah lebih jauh, pengguna Anda harus memiliki hak administratif.

Pada tab Proses :

  • Periksa Tampilkan proses dari semua pengguna .
  • Klik kanan pada proses "tabel header" (yang berisi nama kolom seperti nama Gambar , PID , User Name , CPU , ...), dan pilih Pilih Kolom ... .
    • Pada dialog yang muncul, gulir ke bawah dan pastikan Anda memeriksa Baris perintah , dan PID (Pengidentifikasi Proses) kemudian tekan OK .
  • Kembali ke tab Processes , klik pada header kolom CPU sehingga proses akan dipesan oleh konsumsi CPU mereka (perhatikan bahwa proses mungkin ditampilkan dalam urutan naik / turun - setiap klik pada CPU mengalihkan pesanan), klik sampai 2 proses muncul di bagian atas tabel. Sekarang Anda dapat melihat baris perintah mereka (saya tidak tahu tetapi saya merasa bahwa salah satunya adalah netsvcs(Layanan Jaringan)) dan juga PID mereka.

  • Selanjutnya, Anda harus mencocokkan 2 proses dengan layanan. Untuk itu Anda bisa:

    • Klik kanan pada mereka dan kemudian Pergi ke layanan (s) ... . Ini akan pindah ke tab Layanan , dengan memilih semua layanan yang sedang berjalan dalam proses itu (untuk opsi ini Anda tidak memerlukan langkah-langkah sebelumnya :)).
    • Buka Layanan snapin dalam mmc . Ketika melakukan klik dua kali pada suatu layanan (hanya masuk akal untuk memeriksa layanan yang sedang berjalan), Di bawah Path ke executable Anda dapat melihat baris perintah mereka di mana Anda harus melakukan pencocokan.
  • Pada W10 Anda dapat melihat info persis yang Anda butuhkan dari Resource Monitor (Anda bisa memulainya dari Task Manager , tab Performance ). Di sana Anda pergi ke tab CPU dan layanan dan konsumsi CPU mereka terdaftar.

EDIT0 : Jawaban yang diperbarui untuk memberikan pendekatan yang lebih sederhana (dan lebih masuk akal), daripada menggaruk sisi kepala kanan saya menggunakan gaya tangan kiri saya , yang awalnya saya posting.

CristiFati
sumber
Saya tidak pernah memperhatikan Anda dapat melihat baris perintah, rapi! Tidak sesederhana jawaban Harrymc, tetapi baik untuk diketahui.
Violet Giraffe
Manajer Tugas dapat melakukannya sendiri. Jika proses svchost dipilih saat beralih ke tab Layanan, layanan yang berjalan dalam proses itu akan dipilih di sana.
Simon Richter
1
Sangat? Pada W10 ini tidak terjadi (setidaknya ketika ada beberapa layanan yang sudah dipilih). Satu-satunya cara adalah dengan mengklik pada proses, dan kemudian pilih Pergi ke layanan (opsi yang saya lewatkan - kemungkinan besar ada di W7 juga). Sayangnya saya tidak dapat memeriksa.
CristiFati
1
@CristiFati opsi ini sudah ada sejak Windows Vista (sumber: technet.microsoft.com/en-us/library/ff642468.aspx ), Anda mungkin harus menambahkannya ke jawaban Anda alih-alih pencocokan PID dengan tangan
Vasily Alexeev