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.
Dan cuplikan beberapa penghitung kinerja:
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
sumber
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:
Untuk pengujian:
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;)
sumber
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.
sumber
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
sumber
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.
sumber
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?
sumber
Ini mungkin tidak sepenuhnya terkait, tetapi verifikasi jika Anda menggunakan NOLOCK dalam kueri Anda. Mungkin membantu dalam kasus timeout SQL.
sumber