Bagaimana Anda bisa tahu apa yang sedang dilakukan w3wp.exe? (atau cara mendiagnosis masalah kinerja)

42

Saya mengalami masalah kinerja di situs yang kami buat, dan saya tidak yakin bagaimana cara mendiagnosisnya.

Deskripsi singkatnya adalah: Kami memiliki situs yang sangat kecil ( http://hearablog.com ) dengan lalu lintas yang sangat sedikit, di server khusus yang jelek, CPU selalu sangat tinggi, kadang-kadang tetap 100% selama beberapa menit, dan w3wp.exe mengambil sebagian besar dari itu. Skenario tipikal adalah w3wp.exe mengambil 60%, dan SQL Server membutuhkan sekitar 30%. DB kami juga cukup kecil.

Deskripsi panjang dan detail lebih lanjut:

  • Situs ini dihosting di server yang sangat jelek oleh Cari.Net. Sejak awal kami memiliki perasaan bahwa server tidak berperilaku benar, seperti beberapa hal akan memakan waktu terlalu lama, jadi ini bisa menjadi masalah konfigurasi sejak awal. Ini mungkin juga bahwa kita mendapatkan server virtual sementara kita seharusnya memiliki satu berdedikasi, walaupun kita tidak punya bukti bahwa akan menunjukkan ini, kecuali untuk fakta bahwa server cenderung cukup lambat.

  • Server adalah Windows 2008 Standard 64-bit, dengan SQL 2008 Express

  • Perangkat kerasnya adalah Celeron 2,80 GHz, 1Gb RAM

  • Situs web ini dikembangkan dalam ASP.Net MVC, menggunakan Entity Framework untuk akses data.

  • Sekarang, ini adalah perangkat keras yang sangat jelek, tetapi saya memiliki server lain dengan orang-orang ini, dengan HW yang setara (atau lebih buruk), dan kinerjanya jauh lebih baik daripada yang ini. Yang mengatakan, server lain memiliki W2003 dan SQL2005, dan saya menggunakan ASP.Net "WebForms" 2.0, tanpa MVC, tanpa LINQ, tanpa EF; jadi saya tidak yakin apakah pergi ke 2008 / hal-hal lain berarti hukuman kinerja yang besar diharapkan.

  • Saya melayani file MP3 (5-20 Mb) secara teratur, yang merupakan beban yang sedikit tidak biasa, mungkin itu menyebabkan beberapa jenis masalah?
    Apakah itu menyebabkan w3wp menggunakan banyak CPU?

  • Penggunaan disk tampaknya sangat rendah. Memori biasanya sekitar 90%, tetapi penggunaan disk tampaknya menunjukkan itu tidak banyak paging.

  • Saya mendapatkan banyak sekali e-mail setiap hari tentang batas waktu SQL, untuk kueri yang menghabiskan waktu lebih dari 30 detik, meskipun semua kueri kami cukup mudah (atau seharusnya, tetapi EF mungkin mengacaukannya).

Ini adalah apa yang tampak seperti monitor sumber daya dalam salah satu "sprint" CPU 100% ini, jika ada sesuatu yang berguna di sana.

teks alternatif

Dan cuplikan beberapa penghitung kinerja: teks alternatif

Sekarang, yang paling membingungkan saya adalah penggunaan CPU pada w3wp sangat tinggi. Seharusnya tidak melakukan banyak hal ... Jadi pertanyaan saya adalah ...

  • Apakah ada cara untuk mengetahui "apa" yang dilakukannya? Mungkin bahkan profil itu?
  • Adakah penghitung kinerja yang harus saya lihat?
  • Apakah ini yang diharapkan mengingat konfigurasi perangkat keras / perangkat lunak ini?
  • Apakah ini bisa disebabkan oleh beberapa jenis kegagalan konfigurasi, di mana Anda akan mulai mencari?

Terima kasih banyak.
Daniel Magliola

Daniel Magliola
sumber

Jawaban:

42

Anda juga dapat menggunakan UI Proses Pekerja di dalam IIS Manager dan memeriksa permintaan yang saat ini mengeksekusi dan melihat di mana mereka terjebak jika ada. Buka IIS Manager-> Klik Server di Pohon-> Proses Klik Pekerja Dua Ikon-> Klik dua kali Proses Pekerja yang menggunakan CPU untuk melihat permintaan yang sedang dieksekusi secara real time sehingga Anda dapat melihat modul mana yang membutuhkan waktu.

Juga pertimbangkan untuk menggunakan Pelacakan Permintaan Gagal untuk melacak beberapa waktu per permintaan untuk melihat di mana waktu yang lama.

Carlos Aguilar Mares
sumber
2
Ini menjanjikan, sebenarnya terdengar seperti PERSIS apa yang ingin saya lihat, tetapi sebenarnya layar itu kosong. Tampaknya hanya menampilkan permintaan yang membutuhkan waktu lebih dari satu detik, menurut tanda besar di atas, dan tidak ada permintaan kami yang jelas, karena daftarnya kosong. Ada ide tentang bagaimana membuatnya menampilkan lebih banyak permintaan? Bagaimana cara menurunkan filter 1s? Terima kasih!
Daniel Magliola
1
Anda dapat mengetik 0 di filter dan mengklik Go, yang akan membuatnya menjadi 0 detik. Juga, Anda dapat menjalankan dari prompt perintah yang ditinggikan "% windir% \ system32 \ inetsrv \ appcmd.exe daftar permintaan"
Carlos Aguilar Mares
1
Carlos terima kasih banyak! Inilah yang akhirnya saya lakukan untuk menemukan satu permintaan (cron yang kami punya) yang membunuh server saya setiap 5 menit (butuh 3,5 menit untuk menjalankan, sehingga hampir selalu pada CPU 100%). Terima kasih!!!
Daniel Magliola
1
UI ini memberi tahu saya URL apa yang telah diakses; sayangnya itu POST ke layanan web asmx, dan data itu tidak tersedia. (headbang)
Ross Presser
5

Oke, untuk memulai - server BENAR-BENAR jelek. Tapi itu HARUS cukup.

  • Untuk virtualisasi, periksa driver Anda. Saya tahu tidak ada platform virutalisasi yang menyembunyikan CPU (dan saya tidak yakin seseorang memasang hyper-v atau esx pada celeron) tetapi driver untuk disk dll merupakan indikasi.

  • CPU seharusnya tidak setinggi itu. Sayangnya, dengan RAM ini, Anda cukup banyak bersulang - jika Anda mulai menambahkan profiler, Anda cukup banyak akan menghancurkan memori yang Anda miliki.

Saya akan:

  • Periksa log untuk mengeksekusi hal-hal saat ini.
  • Tingkatkan OS ke 2008 R2 - BANYAK informasi lebih lanjut tersedia di sana.

Untuk pengujian:

  • Di lingkungan pengembang Anda, buat salinan situs dan jalankan beberapa tes kinerja.
  • Lakukan profil di sana.
  • Gunakan Pelacakan Permintaan Gagal untuk mengetahui permintaan mana yang gagal.

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

memiliki beberapa mulai di sana. Ini mungkin memberi Anda petunjuk jika masalahnya lebih - hm - "dikategorikan".

Saya juga akan menyimpan log kinerja jangka panjang. Hati-hati dengan IO Anda (detik / baca, Detik / tulis cukup banyak satu-satunya yang relevan). Semua yang lain adalah IO bijak juga samar-samar - tetapi begitu IO Anda mulai memakan waktu lebih lama dari yang seharusnya, cakram jatuh di belakang.

Saya akan mengesampingkan masalah konfigurasi pada saat ini - setidaknya sebagai indikator utama. Sesuatu menggunakan sumber W3p Anda, sekarang Anda perlu mencari tahu apa itu.

Secara umum, ini bukan server saya akan senang memiliki fisik - itu sangat kecil, tidak masuk akal IMHO untuk memiliki mesin di sana. Virtual akan lebih baik;)

TomTom
sumber
terimakasih banyak atas jawaban Anda. beberapa pertanyaan: Log mana yang akan Anda periksa untuk barang yang dieksekusi saat ini? (maaf jika ini pertanyaan pemula) - Tingkatkan OS: Kami mungkin mencobanya, tapi saya khawatir ini bisa merusak barang, mungkin, seberapa aman ini? - Lingkungan pengembang: Masalahnya adalah di lingkungan pengembang saya berfungsi dengan baik. CPU dapat diabaikan, permintaan tidak gagal, dll.
Daniel Magliola
Adapun log I / O: Saya baru saja menambahkan penghitung yang Anda sebutkan, dan mereka semua pada 0 saat CPU tinggi. Saya baru saja menambahkan tangkapan layar dari beberapa penghitung kinerja yang saya lihat. Saya tahu snapshot tidak menceritakan keseluruhan cerita, tetapi nilai-nilai itu cenderung cukup stabil. Apakah Anda pikir jumlah koneksi saat ini (yang saya tidak punya penjelasan untuk) bisa menjadi masalah? Adakah gagasan tentang bagaimana mencari tahu apa yang diminta / dilakukan oleh koneksi-koneksi tersebut? Adakah penghitung lain yang menurut Anda mungkin berguna untuk mendiagnosis sesuatu seperti ini?
Daniel Magliola
Nah, R2 cukup aman. Saya memutakhirkan semuanya dan tidak pernah mendapat masalah. Bagaimanapun .... ini adalah masalah CPU dan memakainya bisa mengerikan, terutama mengingat Anda tidak memiliki cukup RAM untuk menginstal profiler. Saya sebenarnya akan mencoba menginstal ulang lengkap. Ya, menyebalkan, tetapi itu berarti Anda dapat menginstal R2 segar dan melihat apakah masalahnya masih ada. Masalahnya adalah Anda tidak memiliki sistem cadangan, jadi Anda tidak dapat mengidentifikasi apakah masalahnya "lokal" atau lebih umum. Atau: hentikan IIS, hapus semua folder temp yang digunakan, juga
TomTom
untuk kompilasi dan lihat apa yang terjadi ketika Anda me-restart. Dengan R2 Anda bisa melihat apakah / file apa yang tetap dibuka oleh IIS. Apakah ini bersifat lokal untuk satu aplikasi web, atau apakah itu juga ada jika semua situs web dihentikan? Hal berikutnya yang harus dicoba - matikan semua situs dan cari tahu yang mana yang merusak.
TomTom
Akhirnya, masalah dengan server virtual adalah, sejauh yang saya temukan, kami akhirnya membayar lebih atau sama untuk perangkat keras yang sama, ditambah, tagihan bandwidth adalah pembunuh (ingatlah kami melayani file audio). Kami akan pindah ke server yang lebih besar jika kami harus, tetapi jujur, dengan lalu lintas yang kami miliki, pasti ada beberapa masalah, kami seharusnya tidak menggunakan CPU 100% sebelumnya ..
Daniel Magliola
4

Anda bisa mencoba menggunakan program yang disebut Process Explorer untuk memantau setiap utas yang berjalan di bawah proses w3wp. Seharusnya Anda dapat melihat utas apa yang menyebabkan semua kerusakan.

Joe Phillips
sumber
3

Saya benar-benar beruntung menggunakan Alat Diagnostik Debug Microsoft untuk membuang proses w3wp saya dan kemudian memeriksa utas dan menumpuk jejak untuk hal-hal yang terkunci. Ia bahkan akan memberi tahu Anda halaman yang diminta yang menghasilkan utas yang SUPER bagus .

http://www.microsoft.com/en-us/download/details.aspx?id=26798

jocull
sumber
1

Saya setuju dengan TomTom di telepon, terutama tentang mendapatkan jarak tempuh yang lebih baik dari Virtual pada saat ini. Debugging / profiling secara lokal untuk mempersempit masalah adalah hal yang benar untuk dilakukan.

Saya akan mengenakan topi dan jubah Karnak The Magnificent dan meminta amplop pertama. Pemberontakan Ram. Apa yang Anda dapatkan ketika Anda meletakkan OS, ASP.NET, dan SQL Server Express yang serakah ke dalam 1GB.

Saya percaya bahwa masalah Anda adalah bahwa SQL Server Express menarik semua RAM yang tersedia untuk Buffer Pool dan lambat untuk merilisnya. Lihat http://support.microsoft.com/kb/321363 untuk informasi lebih lanjut. Juga, IIS memiliki cache default 256MB yang mungkin perlu Anda tweak ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Debug Diagnostics adalah alat yang hebat untuk memecahkan masalah ini (ok, mungkin palu godam).

http://technet.microsoft.com/en-us/library/bb742546.aspx adalah artikel yang cukup layak untuk dilihat. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e menunjukkan daur ulang kolam app menjadi gila sebagai masalah lain yang mungkin terjadi.

Larry Smithmier
sumber
1

Gunakan penghitung "Proses" Perfmon untuk melihat atribut individual dari proses w3wp.exe. Berapa banyak waktu CPU untuk proses pekerja adalah waktu kernel? Kali kernel tinggi bisa menjadi indikasi paging, tetapi Anda mengatakan Anda tidak yakin. Kemungkinan lain adalah driver duff. Proses pekerja memiliki 23 utas aktif, yang bagus, tetapi apa yang mereka lakukan? Coba ProcessExplorer SysInternals untuk menggali lebih banyak lagi; Anda juga dapat melihat koneksi TCP / IP apa yang sedang dimainkan. Saya belum pernah menggunakan SQL Express, tetapi apakah ia memiliki parameter penyetelan memori, seperti kakaknya. Apakah SQL kekurangan memori IIS, menyebabkan paging yang berlebihan?

Simon Catlin
sumber
Mari kita lihat apakah saya melakukan ini dengan benar ... Saya menambahkan waktu prosesor%, dan% penghitung waktu pengguna, keduanya untuk proses w3wp, dan keduanya cocok satu sama lain dengan sempurna sepanjang waktu. Apakah itu berarti tidak ada waktu kernel, atau saya melihat ini dengan cara yang salah? (maaf, saya seorang pemula dalam hal ini)
Daniel Magliola
0

Ini mungkin tidak sepenuhnya terkait, tetapi verifikasi jika Anda menggunakan NOLOCK dalam kueri Anda. Mungkin membantu dalam kasus timeout SQL.

Rodrigo Hahn
sumber