W3wp.exe ne yaptığını nasıl biliyorsunuz? (veya performans probleminin nasıl teşhis edileceği)


42

Yaptığımız bir sitede performans sorunu yaşıyorum ve bunu nasıl teşhis etmeye başlayacağımdan tam olarak emin değilim.

Kısa açıklama: Çok küçük bir sitemiz var ( http://hearablog.com ). Çok az trafik içeren, berbat bir sunucuda, CPU her zaman çok yüksek, bazen dakikalarca% 100 ve w3wp.exe çoğunu alıyor. Tipik bir senaryo w3wp.exe% 60, SQL Server ise% 30 civarındadır. Bizim DB de oldukça küçük.

Uzun açıklama ve daha fazla ayrıntı:

  • Site, Cari.Net tarafından çok berbat bir sunucuda barındırılıyor. Baştan beri, sunucunun doğru davranmadığını, bazı şeylerin çok uzun sürdüğünü düşündüğümüz için, bu başlangıçtan itibaren bir yapılandırma sorunu olabilirdi. Bu olabilir de biz bunu belirtmek istiyorum kanıt olmasına rağmen, sunucu oldukça yavaş olma eğilimindedir gerçeği hariç, özel bir tane zannediyorsunuz ederken sanal sunucuyu elde ettiğinizi olun.

  • Sunucu, Windows 2008 Standard 64-bit'tir, SQL 2008 Express ile birlikte

  • Donanım bir Celeron 2.80 GHz, 1 Gb RAM'dir

  • Web sitesi ASP.Net MVC'de veri erişimi için Entity Framework kullanılarak geliştirilmiştir.

  • Şimdi, bu oldukça berbat bir donanım, ancak bu adamlarla eşdeğer (veya daha kötü) HW'ye sahip başka sunucular da vardı ve performans bundan daha iyi. Yani, diğer sunucularda W2003 ve SQL2005 var ve ASP.Net "WebForms" 2.0 kullanıyorum, MVC yok, LINQ yok, EF yok; Bu yüzden 2008 / diğer şeylere gitmenin büyük bir performans cezası beklendiği anlamına geldiğinden emin değilim.

  • Düzenli olarak MP3 dosyaları (5-20 Mb) sunuyorum, bu biraz sıra dışı bir yük, belki de bu bir tür sorunlara neden oluyor?
    Bu w3wp'nin çok fazla CPU kullanmasına neden olur mu?

  • Disk kullanımı çok düşük görünüyor. Bellek genellikle yaklaşık% 90'dır, ancak disk kullanımı çok fazla disk belleği olmadığını gösteriyor gibi görünmektedir.

  • Ben olsun ton tüm sorguları oldukça basit olmasına rağmen, 30 saniye devralarak sorguları için SQL zaman aşımları hakkında her gün e-postaların (veya olmalı, ama EF o kadar vidalama olabilir).

Kaynak izleyicisi,% 100 CPU'nun bu "sprint" lerinden birinde nasıl göründüğünü gösterir.

alt metin

Ve bazı performans sayaçlarının anlık görüntüsü: alt metin

Şimdi, beni çok şaşırtan şey, w3wp'nin CPU kullanımının çok yüksek olmasıdır. Çok fazla yapmamalıydı ... Yani benim sorularım ...

  • Ne yaptığını bulmanın bir yolu var mı? Belki bile profil?
  • Bakmam gereken performans sayaçları var mı?
  • Bu donanım / yazılım yapılandırması göz önüne alındığında beklenen bu mu?
  • Bu, bir tür konfigürasyon hatasından kaynaklanıyor olabilir mi, nereden bakmaya başladınız?

Çok teşekkür ederim.
Daniel Magliola

Yanıtlar:


42

Ayrıca, İşçi İşlemleri Kullanıcı Arayüzünü IIS Yöneticisi içinde kullanabilir ve şu anda yürütülmekte olan istekleri denetleyebilir ve varsa nerede takıldıklarını görebilirsiniz. IIS Yöneticisi'ni açın-> Ağaçtaki Sunucuya tıklayın-> Çift Tıklama İşçi İşlemleri Simgesi->> Şu anda yürütülen istekleri gerçek zamanlı olarak görmek için CPU kullanan İşçi İşlemini çift tıklatın, böylece hangi modülün zaman aldığını görebilirsiniz.

Ayrıca, uzun süre nereye gittiklerini görmek için istek başına zamanın bir kısmını izlemek için Başarısız İstek İzlemeyi kullanmayı düşünün.


2
Bu umut verici, aslında görmek istediklerim gibi geliyor ama aslında bu ekranlar boş görünüyor. Görünüşe göre, sadece bir saniyeden uzun süren istekleri gösteriyor, üstteki işarete göre ve liste boş olduğundan, taleplerimizden hiçbiri açıkça görülmüyor. Nasıl daha fazla istek gösterebileceği konusunda fikrin var mı? 1s filtresini nasıl düşürürüm? Teşekkürler!
Daniel Magliola

1
Filtreye 0 yazabilir ve 0 saniyeye ayarlayacak olan Git seçeneğine tıklayabilirsiniz. Ayrıca, "% windir% \ system32 \ inetsrv \ appcmd.exe liste istekleri" yükseltilmiş bir komut isteminden de çalıştırılabilir
Carlos Aguilar Mares

1
Çok teşekkür ederim Carlos! Sunucumu her 5 dakikada bir öldüren (sahip olduğumuz bir cron) bir isteği bulmak için işim bitti. Teşekkürler!!!
Daniel Magliola

1
Bu kullanıcı arayüzü bana hangi URL'ye erişildiğini söyledi; ne yazık ki bu bir asmx web servisine verilen bir POST ve bu veri mevcut değil. (headbang)
Ross Presser,

5

Tamam, başlamak için - sunucu GERÇEKTEN berbat. Ama bu yeterli olmalı.

  • Sanallaştırma için sürücülerinizi kontrol edin. İşlemciyi gizleyen hiçbir virütalizasyon platformu olmadığını biliyorum (ve birinin bir celeron üzerine hiper-v veya esx koyduğunu belirttim) ancak disk vb. İçin sürücüler bir göstergedir.

  • CPU bu kadar yüksek olmamalıdır. Ne yazık ki, bu RAM ile çok fazla tostsunuz - bir profilleyici eklemeye başlarsanız, sahip olduğunuz hafızayı oldukça fazla etkileyeceksiniz.

İsterim:

  • Şu anda yürütülen şeyler için günlükleri kontrol edin.
  • İşletim sistemini 2008 R2'ye yükseltin - orada çok daha fazla bilgi var.

Test için:

  • Geliştirme ortamınızda sitenin bir kopyasını alın ve bazı performans testleri yapın.
  • Orada profil yapın.
  • Hangi isteklerin başarısız olduğunu bulmak için Başarısız Yanıt İzleme'yi kullanın.

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

orada bir başlangıç ​​var. Sorunların daha fazla olması durumunda bu size bir ipucu verebilir - hm - "kategorize edilebilir".

Ayrıca uzun vadeli performans kayıtlarını tutardım. IO'nuza dikkat edin (saniye / okuma, Saniye / yazma hemen hemen yalnızca ilgili olanlar). Geri kalan her şey GÇ çok akıllıca - ancak GÇ'niz olması gerekenden daha uzun sürdüğünde diskler geride kalıyor.

En azından birincil gösterge olarak, bu noktada bir yapılandırma sorununu ekarte ederim. Bir şey W3p kaynaklarınızı kullanıyor, şimdi ne olduğunu öğrenmeniz gerekiyor.

Genel olarak, bu fiziksel olanı seveceğim bir sunucu değil - o kadar küçük ki, orada bir makineye IMHO olması mantıklı değil. Sanal daha iyi olurdu;)


Cevabınız için çok teşekkür ederim. bazı sorular: Şu anda hangi öğelerin yürütüldüğünü kontrol etmek istersiniz? (Bu acemi bir soru ise özür dilerim) - Yükseltme işletim sistemi: Bunu deneyebiliriz, ancak korkarım ki, işleri kırabilir, belki, bu ne kadar güvenli? - Dev ortam: Sorun şu ki dev ortamımda iyi çalışıyor. İşlemci ihmal edilebilir, talepler başarısız, vb.
Daniel Magliola

G / Ç günlüklerine gelince: Bahsettiğiniz sayaçları yeni ekledim ve CPU yüksekken hepsi 0'da. Sadece bakıyorum bazı performans sayaçlarının bir ekran görüntüsünü ekledim. Bir enstantanenin tüm hikayeyi anlatmadığını biliyorum, ancak bu değerler oldukça istikrarlı olma eğilimindedir. Mevcut bağlantı sayısının (açıklamam gereken) sorun olabileceğini düşünüyor musunuz? Bu bağlantıların ne istediğini / yaptığını nasıl anlayacağınıza dair bir fikriniz var mı? Böyle bir şeyi teşhis etmek için yararlı olacağını düşündüğünüz başka sayaçlar?
Daniel Magliola

R2 oldukça güvende. Her şeyi yükselttim ve bir sorunum olmadı. Her neyse .... bu bir CPU sorunudur ve çivileme korkunç olabilir, özellikle bir profiler yüklemek için yeterli RAM kullanmamanız şartıyla. Aslında tam bir yeniden yüklemeyi denerdim. Evet, berbat ama R2'yi yeni kurabilecek ve sorunun devam edip etmediğini görebileceksiniz. Kötü bir şey, bir rezerv sistemi kullanmamanızdır, bu nedenle sorunun "yerel" veya daha genel olup olmadığını tespit edemezsiniz. Alternatif olarak: IIS'yi durdurun, kullanımdaki tüm geçici klasörleri silin, ayrıca
TomTom

Derleme için ve yeniden başlattığınızda ne olacağını görün. R2 ile, hangi dosyaların IIS tarafından açık tutulup tutulmadığını görebilirsiniz. Bu bir web uygulamasında yerel mi, yoksa tüm web siteleri durdurulduğunda da var mı? Denenecek bir sonraki şey - tüm siteleri kapatın ve hangisinin bir şeyleri parçaladığını bulun.
TomTom

Son olarak, sanal sunuculardaki sorun, bulduğum kadarıyla, aynı donanım için daha fazla veya aynı şekilde ödeme yaptığımıza ek olarak, bant genişliği faturasının katil olduğudur (ses dosyalarına hizmet ettiğimizi unutmayın). Gerekirse daha büyük bir sunucuya geçeceğiz, ama dürüst olmak gerekirse, sahip olduğumuz trafikte, bir sorun olmalı, hiç bir zaman% 100 CPU kullanmamalıyız ..
Daniel Magliola

4

W3wp işlemi altında çalışan bağımsız iş parçacıklarını izlemek için İşlem Gezgini adlı bir programı kullanmayı deneyebilirsiniz . Hangi ipliğin tüm hasara neden olduğunu görmenize izin vermelidir.



1

Bu noktada TomTom ile, özellikle de Sanal’dan daha iyi kilometre alma konusunda hemfikirim. Sorunu daraltmak için yerel olarak hata ayıklama / profil oluşturma işlemi yapılması gereken doğru şeydir.

Muhteşem Karnak şapkamı ve pelerinimi giyip ilk zarfı isteyeceğim. Ram İsyanı. OS, ASP.NET ve açgözlü bir SQL Server Express'i 1 GB'a yerleştirdiğinizde ne elde edersiniz.

Sorununuzun SQL Server Express'in bir Tampon Havuzu için mevcut tüm RAM'leri çektiğini ve serbest bırakmanın yavaş olduğunu düşünüyorum. Daha fazla bilgi için http://support.microsoft.com/kb/321363 adresine bakın . Ayrıca, IIS'de çimdiklemeniz gerekebilecek varsayılan bir 256 MB önbellek vardır ( https://stackoverflow.com/questions/2853135/controlling-asp-net-output-cache-memory-usage ). Hata Ayıklama Teşhisi , bu sorunu gidermek için harika bir araçtır (tamam, muhtemelen bir balyozla).

http://technet.microsoft.com/en-us/library/bb742546.aspx , bakmak için oldukça iyi bir makaledir. http://social.technet.microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e , uygulama havuzunun geri dönüşümünün başka bir olası sorun olarak delildiğini gösteriyor.


1

W3wp.exe işleminin bireysel niteliklerini görmek için Perfmon'un "İşlem" sayacını kullanın. Alt işlem için CPU süresinin ne kadarı çekirdek zamandır? Yüksek çekirdek zamanları sayfalamanın bir göstergesi olabilir, ancak ikna olmadığınızı söylüyorsunuz. Diğer olanaklar duff sürücüleridir. İşçi işleminde aktif 23 iş parçacığı var, hangisi iyi, ama ne yapıyorlar? SysInternals'ın ProcessExplorer'ını biraz daha araştırmaya çalışın; hangi TCP / IP bağlantılarının çalındığını da görebilirsiniz. SQL Express'i kullanmadım, ancak ağabeyi gibi hafıza ayarlama parametreleri var mı? SQL, IIS'nin belleğini aç bırakarak aşırı sayfalamaya neden oluyor mu?


Bakalım bu doğru mu yapıyorum ... Her ikisi de w3wp işlemi için% işlemci zamanını ve% kullanıcı zaman sayaçlarını ekledim ve ikisi de her zaman mükemmel bir şekilde birbirleriyle eşleşiyor. Bu, çekirdek zamanı olmadığı anlamına mı geliyor, yoksa yanlış yoldan mı bakıyorum? (üzgünüm, bu konuda
acemiyim

0

Tamamen ilişkili olmayabilir, ancak sorgularınızda NOLOCK kullanıp kullanmadığınızı doğrulayın. SQL zaman aşımı durumunda yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.