Cara membunuh layanan yang digantung di Windows 2008R2

8

Saya memiliki server Windows 2008R2 yang menjalankan NSClient ++. Untuk beberapa alasan, layanan ini telah memutar celana dalam dan berhenti merespons jajak pendapat Nagios.

Ketika saya mencoba me-restart layanan manajer layanan membutuhkan waktu lama untuk mencoba dan mematikan layanan kemudian akhirnya menyerah dengan pesan di sepanjang baris "layanan butuh waktu terlalu lama untuk merespon". Tapi ... itu juga memulai contoh baru dari layanan.

Jika saya mencari di Task Manager atau tasklistsekarang saya dapat melihat dua contoh nsclient++.exemenjalankan.

Saya mencoba untuk membunuh keduanya menggunakan:

  • klik kanan dan "Akhiri Proses" di task manager - berpura-pura untuk membunuh proses dan melaporkan tidak ada kesalahan (misalnya Access Ditolak) tetapi prosesnya masih ada.

  • taskkill /PID <proc id> /F- melaporkan SUCCESS: The process with PID 6672 has been terminated.tetapi prosesnya masih berjalan.

  • mengunduh SysInternals PsTools dan menjalankan pskill <PID>- laporan Process <PID> killed- namun prosesnya masih ada.

  • mengeksekusi at hh:mm pskill <PID>untuk pskillmelakukan ini sebagai SYSTEMakun ... dan Anda menduga prosesnya masih berjalan.

Semua hal di atas dijalankan dalam prompt perintah Administrator.

Selain reboot yang tidak terlalu ideal (kotak ini adalah server produksi yang cukup kritis), apa lagi yang bisa saya coba?

Server tidak berada di bawah tekanan sumber daya apa pun (memori, CPU, disk, dll) dan semua yang berjalan di dalamnya baik-baik saja.

Seperti yang terlihat cepat pada tab utas di SysInternals Process Explorer menunjukkan bahwa semua nsclient++.exeinstance ini macet bongkar:

masukkan deskripsi gambar di sini

Selain itu, saya juga mencoba membunuh semua koneksi TCP untuk proses zombie (?) Ini (dengan TCPView) dengan harapan saya bisa memulai instance baru dan bisa mengambil port 5666. Kemudian kita bisa reboot server ketika segalanya lebih tenang, tetapi sayangnya itu tidak berhasil.

Kev
sumber
3
Jika suatu proses tidak akan mematikan dengan Task Manager maka itu sebenarnya terjebak dalam rutinitas kernel ... Jadi Windows mengalami masalah. Apakah Anda memiliki driver "menarik" yang diinstal?
Chris S
Tidak ada yang benar-benar eksotis menjalankan driver-bijaksana. Itu XenServer VM sehingga memiliki driver Xen yang biasanya kita tidak memiliki masalah dengan. Kami juga menjalankan R1 CDP Enterprise dan yang tampaknya beroperasi dalam parameter operasi normal kami. Saya menambahkan tangkapan layar yang memperlihatkan tab Thread dari procexp.exe.
Kev
Jika Anda mengklik Stack, seperti apa tumpukan itu untuk utas yang macet?
HeatfanJohn
@HeatfanJohn - Saya memikirkan itu juga tetapi mendapatkan kesalahan "Kesalahan mengakses utas" ketika saya melakukan itu.
Kev
Dugaan saya terkait dengan komentar @ChrisS tentang macet dalam rutinitas kernel.
HeatfanJohn

Jawaban:

3

Meskipun sepertinya Anda sudah mengetahui hal ini, masalahnya adalah bahwa prosesnya menunggu sesuatu di Kernel. (Ini biasanya masalah tingkat driver, tetapi tidak selalu.) Satu-satunya cara untuk mematikan proses semacam itu adalah dengan membongkar kernel, yang, tentu saja, tidak dapat Anda lakukan tanpa me-reboot.

Mungkin patut dicoba beberapa debugging kernel ( apakah alat ini berfungsi pada 2008 R2 ?) Dengan harapan mempersempit penyebab atau konflik spesifik, tetapi opsi Anda untuk menangani masalah tersebut baik dengan itu, atau me-reboot server untuk menghilangkannya.

Apakah ada alasan Anda belum mempertimbangkan untuk hidup dengannya? Jika itu hanya proses zombie, dan itu tidak berdampak apa-apa, saya pikir Anda bisa menunda reboot sampai jendela pemeliharaan atau lebih banyak waktu yang tepat. Biasanya pendekatan saya, ketika zombie atau proses digantung tidak mengganggu apa pun - rawatlah selama siklus patch berikutnya atau jendela pemeliharaan terjadwal.

HopelessN00b
sumber
Sayangnya terlambat untuk memeriksa proses ini di WinDbg, orang-orang infrastruktur telah me-reboot server. Tapi berguna untuk diketahui lain kali.
Kev
Masalah lainnya adalah kita tidak bisa hidup dengan ini seperti ini. Layanan ini adalah NSClient ++ yang kami gunakan bersama dengan nagios. Saya bahkan tidak bisa mendapatkan exe layanan baru untuk menjalankan dan menanggapi permintaan polling, saya pikir karena proses zombie ini masih tergantung pada port 5666 yang didengarkannya (tentu saja dapat melihat salah satu dari mereka masih memegang port di TCPView dan saya tidak bisa menutupnya).
Kev
Yah, itu tentu alasan yang sangat bagus untuk tidak hidup dengannya.
HopelessN00b
Jika itu terjadi lagi, jangan lupakan bayi Mark Russinovich yang lain - Process Monitor. Arahkan procmon pada proses untuk melihat apa yang dilakukannya. Alat luar biasa.
Simon Catlin
@SimonCatlin - aye, saya melakukan itu juga, tetapi tidak ada yang benar-benar muncul pada saya.
Kev