Minggu, 04 Mei 2014

Melacak service yang bermasalah dalam svchost.exe

Tidak sama halnya dengan proses lain pada umumnya, tidak mudah menyelidiki service penyebab masalah penggunaan resource yang berlebihan (CPU, Memory, Network) pada proses svchost.exe. Hal ini disebabkan karena svchost.exe hanyalah kontainer dari service-service Windows, sehingga untuk mengatasi hal ini diperlukan cara khusus untuk mengetahui service yang mana yang menyebabkan masalah di dalam svchost.

Masalah CPU Usage Tinggi

Melacak masalah service dalam proses svchost yang menggunakan resource CPU yang tinggi menjadi lebih mudah sejak Windows Vista karena (hampir) setiap thread di dalam proses svchost kini memiliki service tags untuk mengidentifikasi service mana yang memiliki thread tersebut. Process Explorer memanfaatkan fitur ini sehingga anda dapat menggunakannya untuk melacak service dengan CPU Usage 100%. Klik 2 kali proses svchost.exe yang CPU Usage-nya tinggi dan pilih tab threads, seperti yang terlihat pada gambar di bawah ini.

Process Explorer Threads tab

Klik header dari kolom CPU sehingga thread yang menggunakan CPU time tertinggi berada di baris atas. Kemudian anda bisa melihat service mana yang memiliki thread tersebut di kolom service. Service yang tertulis di kolom tersebut adalah akronim dari nama service yang sebenarnya, yang anda dapat lihat di tab Services.

Process Explorer Services tab

Namun seperti yang anda lihat di tab threads, tidak semua thread dapat diasosiasi­kan dengan service. Selain dari main thread svchost (yang di-highlight dalam gambar pertama), terdapat beberapa thread milik ntdll.dll (thread pool) yang tidak diaso­si­a­si­kan dengan service. Untuk mengetahui service yang mana yang memiliki thread-thread tersebut, anda harus menggunakan cara lain yang akan dijelaskan nanti.

Masalah Network

Kembali dengan memanfaatkan fitur service tags untuk thread di dalam proses svchost, anda dapat menggunakan Process Explorer untuk melacak service yang menggunakan resource network. Namun sebelumnya, anda harus mengetahui dulu proses svchost yang mana yang menggunakan resource network. Untuk mengatasi masalah ini, anda dapat menggunakan Resource Monitor—dengan cara yang sudah dijelaskan pada artikel svchost.exe mencuri kuota internet anda?—untuk mencatat Process ID (PID) dari proses svchost yang menggunakan resource network paling besar. Anda juga bisa menggunakan program-program yang memonitor traffic jaringan seperti NetLimiter untuk ini. Bila PID sudah anda peroleh, jalankan Process Explorer, klik 2 kali pada proses svchost.exe yang memiliki nomor PID itu, kemudian di dalam dialog properties pilih tab TCP/IP. Anda dapat melihat koneksi-koneksi network yang dibuat oleh proses ini dan service yang membuatnya di kolom Service.

Process Explorer TCP/IP tab

Selain Process Explorer, anda juga dapat menggunakan program netstat—yang sejak Windows Vista juga memanfaatkan fitur service tags—untuk mengetahui service yang mana yang membuat koneksi network.

Netstat command

Memisahkan service ke dalam satu proses svchost tersendiri

Meskipun fitur service tags dapat digunakan untuk melacak penggunaan resource CPU maupun network yang tinggi oleh windows service, namun sayangnya fitur ini tidak dapat digunakan untuk melacak service dalam svchost yang memakan banyak RAM. Ini disebabkan karena hanya ada satu memory pool dalam satu proses svchost yang digunakan oleh semua service untuk mengalokasikan memori, sehingga sulit untuk membedakan memori yang dialokasikan oleh satu service dengan service lainnya.

Satu cara yang bisa anda gunakan untuk mengatasi masalah ini adalah dengan memisahkan satu service yang ingin anda periksa ke dalam satu proses svchost tersendiri. Dengan demikian, semua pengalokasian memori di dalam proses ini hanya dilakukan oleh service tersebut. Dan cara ini juga dapat digunakan untuk masalah thread yang tidak dapat diketahui service yang mana yang menjalankannya. Misalkan anda ingin menjalankan service Windows Update (wuauserv) dalam satu proses tersendiri, anda buka Command Prompt sebagai administrator, dan jalankan perintah berikut:

sc config wuauserv type= own

Setelah perintah di atas dijalankan, restart service Windows Update. Anda dapat melihat service Windows Update dijalankan dalam satu proses svchost yang terpisah seperti gambar di bawah ini:

Process Explorer services list

Setelah service Windows Update terisolasi, anda dapat meneliti apakah service ini yang menggunakan memori dalam jumlah besar (atau menggunakan resource CPU yang tinggi). Untuk mengembalikan service Windows Update ke dalam proses svchost asalnya, jalankan perintah ini:

sc config wuauserv type= share

Anda harus me-reboot komputer setelah menjalankan perintah di atas.

Anda dapat mengulangi cara ini untuk setiap service di dalam proses svchost sampai anda menemukan service yang bermasalah.

Semoga bermanfaat.

2 komentar:

  1. bro gua scvhost nya aktif saat online, baru di taskmanager dak ada namanya, kalo di klik kanan - properties baru ada namanya "scvhost"- jara matiin nya gimananya

    BalasHapus
    Balasan
    1. kenapa dimatiin gan? kalo svchostnya idle aja harusnya ga bakal ganggu aktifitas online agan. kalo pun mau dimatiin ga bisa skaligus satu proses itu. sperti yg dijlaskan di artikel, svchost itu kumpulan dari beberapa windows service, jadi matiin nya jg harus satu-satu.

      Hapus