Aracılığıyla paylaş


IIS uygulama havuzunda Yüksek CPU sorunlarını giderme

Şunlar için geçerlidir: Internet Information Services

Bu sorun giderici, bir Internet Information Services (IIS) uygulama havuzunda sürekli yüksek CPU'nun nedenini belirlemenize yardımcı olur. Bir web uygulaması isteklere hizmet ettikçe CPU kullanımının artmasının normal olduğunu unutmayın. Bununla birlikte, CPU'nun uzun süreler boyunca yüksek düzeyde (%80 veya daha yüksek) sürekli olarak kaldığını görürseniz uygulamanızın performansı düşer. Bu nedenle, mümkünse ele alınabilmesi ve düzeltilmesi için sürekli yüksek CPU'nun nedenini anlamak önemlidir.

Senaryo

IIS'deki bir uygulama havuzu % 90'ı aşan uzun bir yüksek CPU süresiyle karşılaşıyor. Uygulama test edildiğinde hiçbir sorunla karşılaşılmaz. Ancak, uygulama gerçek kullanıcı yüküyle karşılaştığında CPU yüksek bir yüzdeye çıkar ve kalır. Kurtarmak için uygulama havuzunun yeniden başlatılması gerekir, ancak bunu yaptıktan sonra CPU yeniden üst düzeye çıkar.

Araçlar

Veri toplama

Yüksek CPU kullanımı sorunlarıyla karşılaştığınızda yapmanız gereken ilk şey, CPU kullanan işlemi belirlemektir. Bunu yapmak için Görev Yöneticisi'ndeki İşlemler sekmesini kullanabilirsiniz. Tüm kullanıcılardan işlemleri göster onay kutusunu seçtiğinizden emin olun. Aşağıdaki görüntüde, işaretli bu kutu ve IIS uygulama havuzunu barındıran w3wp.exe işleminin yüksek düzeyde CPU kullandığı gösterilmektedir.

Windows Görev Yöneticisi'nin ekran görüntüsü. C P U sütununun altında w 3 w p yürütülebilir satırında 85 vurgulanır. Tüm kullanıcılardan gelen işlemleri göster seçilidir.

Cpu kullanan işlemi belirlemek için Performans İzleyicisi de kullanabilirsiniz. Performans İzleyicisi kullanma hakkında daha fazla bilgi için bkz. Performans verilerini çözümleme.

İpucu

Belirli bir w3wp.exe işlemiyle ilişkili uygulama havuzunu belirlemeniz gerekiyorsa, bir Yönetim Komut İstemi açın, klasörüne %windir%\System32\inetsrvcd %windir%\System32\inetsrv geçin ve komutunu çalıştırın appcmd list wp. Bu, w3wp.exe işleminin işlem tanımlayıcısını (PID) tırnak içinde gösterir. Bu PID'yi Görev Yöneticisi'nde kullanılabilen PID ile eşleştirebilirsiniz.

bir w3wp.exe işleminin yüksek CPU ile karşılaştığını onayladıktan sonra, soruna neyin neden olduğunu belirlemek için aşağıdaki bilgileri toplamanız gerekir:

  • Performans Monitörü veri toplayıcı kümesi.
  • w3wp.exe işleminin kullanıcı modu bellek dökümü.

Bunların her ikisinin de yüksek CPU olayı sırasında toplanması gerekir.

Performans İzleyicisi veri toplayıcı kümesi toplama

Performans İzleyicisi verileri genellikle yüksek CPU sorunlarının nedenini belirleme açısından kritik önem taşır. Uygulamanızın performansının "büyük resim" görünümünü almak için de son derece yararlı olabilir.

Perfmon verileri gerçek zamanlı olarak görüntülenebilir veya daha sonra gözden geçirilebilen bir veri toplayıcı kümesinde toplanabilir. Yüksek CPU sorununu gidermek için bir veri toplayıcı kümesi toplamamız gerekir. Yüksek CPU sorunlarını gidermeye yönelik bir veri toplayıcı kümesi oluşturmak için aşağıdaki adımları izleyin.

  1. Windows Denetim Masası'dan Yönetim Araçları'nı açın.
  2. Performans İzleyicisi'ne çift tıklayın.
  3. Veri Toplayıcı Kümeleri düğümünü genişletin.
  4. Kullanıcı Tanımlı'ya sağ tıklayın ve Yeni ->Veri Toplayıcı Kümesi seçin.
  5. Veri toplayıcı kümesinin adı olarak Yüksek CPU girin.
  6. El ile Oluştur (Gelişmiş)'i seçin.
  7. İleri'yi seçin.
  8. Veri Günlükleri Oluştur'u seçin.
  9. Performans Sayacı onay kutusunu seçin.
  10. İleri'yi seçin.
  11. Ekle'yi seçin. Uygulamanız ASP.NET bir uygulama değilse 19. Adıma geçin.
  12. Sayaç listesinin en üstüne gidin ve .NET CLR Belleği'ni seçin.
  13. Örnekler listesinde tüm örnekleri<>.
  14. Sayaçları eklenen sayaçlar listesine eklemek için Ekle'yi seçin.
  15. Sayaç listesinden ASP.NET ve ardından Ekle'yi seçin.
  16. Sayaç listesinden ASP.NET Uygulamalar'ı seçin.
  17. Örnek listesinden tüm örnekleri<>.
  18. Ekle'yi seçin.
  19. Sayaç listesinden İşlem'i genişletin. (İşlemc’i değil, işlem’i genişlettiğinizden emin olun.)
  20. İşlem nesnesinden % İşlemci Süresi öğesini seçin.
  21. Örnek listesinden tüm örnekleri<>.
  22. Ekle'yi seçin.
  23. Sayaç listesinden İş Parçacığı'nı genişletin.
  24. % İşlemci Süresiİş Parçacığı nesnesinden seçin.
  25. Örnek listesinden tüm örnekleri<>.
  26. Ekle'yi seçin.
  27. Örnek listesinden Kimlik İş Parçacığı'nı seçin.
  28. Ekle'yi seçin.

İletişim kutunuz artık aşağıdaki görüntü gibi görünmelidir.

Veri Toplama 0 1 Özellikler iletişim kutusunu gösteren ekran görüntüsü. Performans Sayaçları sekmesinde I D İş Parçacığı seçilir.

Tamam -İleri'yi>. Veri toplayıcı kümesinin kaydedildiği yeri not edin. (Gerekirse bu konumu değiştirebilirsiniz.) Ardından Son'u seçin.

Veri toplayıcı kümesi henüz çalışmıyor. Başlatmak için Kullanıcı Tanımlı düğümünün altındaki Yüksek CPU'yasağ tıklayın ve menüden Başlat'ı seçin.

Hata Ayıklama Tanılama kuralı oluşturma

Yüksek CPU koşulu oluştuğunda kullanıcı modu işlem dökümlerini toplamanın en kolay yolu Hata Ayıklama Tanılaması'nı kullanmaktır.

DebugDiag'ı indirin, sunucunuza yükleyin ve çalıştırın. (Başlat menüsünde yükleme işleminden sonra bulacaksınız.) DebugDiag'ı çalıştırdığınızda, Kural Türünü Seç iletişim kutusu görüntülenir. Uygulama havuzunuz için çökme kuralı oluşturmak için adımları izleyin:

  1. Performans -> seçin.
  2. Performans Sayaçları -> seçin.
  3. Performans Tetikleyicileri Ekle'yi seçin.
  4. İşlemci (İşlem değil) nesnesini genişletin ve İşlemci Süresi % öğesini seçin. Windows Server 2008 R2 kullanıyorsanız ve 64'ten fazla işlemciniz varsa, İşlemci nesnesi yerine İşlemci Bilgileri nesnesini seçin.
  5. Örnek listesinde _Total'ı seçin.
  6. Ekle -Tamam'ı>.
  7. Yeni eklenen tetikleyiciyi ve ardından Eşikleri Düzenle'yi seçin. Performans Sayaçlarını Seç iletişim kutusunu gösteren ekran görüntüsü.
  8. Açılan listeden Yukarıda'ya tıklayın.
  9. Eşiği 80 olarak değiştirin.
  10. Saniye sayısı için 20 girin. (Gerekirse bu değeri ayarlayabilirsiniz, ancak hatalı tetikleyicileri önlemek için az sayıda saniye belirtmemeye dikkat edin.)
  11. Tamam'ı seçin.
  12. İleri'yi seçin.
  13. Döküm Hedefi Ekle'yi seçin.
  14. Açılan listeden Web Uygulaması Havuzu'na tıklayın.
  15. Uygulama havuzları listesinden uygulama havuzunuzu seçin.
  16. Tamam'ı seçin.
  17. İleri'yi seçin.
  18. İleri'yi yeniden seçin.
  19. İsterseniz kuralınız için bir ad girin ve yığınların kaydedileceği konumu not edin. İsterseniz bu konumu değiştirebilirsiniz.
  20. İleri'yi seçin.
  21. Kuralı Şimdi Etkinleştir'i ve ardından Tamamla'yı seçin.

İpucu

13-15 arası adımlarda kullanılan tekniği kullanarak birden çok döküm hedefi ekleyerek birden çok uygulama havuzunun dökümlerini oluşturabilirsiniz.

Bu kural 11 döküm dosyası oluşturur. İlk 10, boyutu oldukça küçük olacak "mini dökümler" olacaktır. Son döküm, tam belleğe sahip bir döküm olacaktır ve dökümler çok daha büyük olacaktır.

Yüksek CPU sorunu oluştuktan sonra Perfmon veri toplayıcı kümesinin veri toplamasını durdurmak istersiniz. Bunu yapmak için, Kullanıcı Tanımlı düğümü altında listelenen Yüksek CPU veri toplayıcı kümesine sağ tıklayın ve Durdur'u seçin.

Veri analizi

Yüksek CPU olayından sonra gözden geçirmeniz gereken iki veri kümesi olacaktır; Perfmon veri toplayıcı kümesi ve bellek dökümleri. Perfmon verilerini gözden geçirerek başlayalım.

Performans verilerinin analizi

Sorununuzun Perfmon verilerini gözden geçirmek için, Kullanıcı Tanımlı düğüm altında listelenen Yüksek CPU veri toplayıcı kümesine sağ tıklayın ve En Son Rapor'a tıklayın. Aşağıdaki ekran görüntüsüne benzer bir rapor görürsünüz.

Performans İzleyicisi penceresini gösteren ekran görüntüsü.

İlk şey, gözden geçirmek istediğiniz açık sayaçları ekleyebilmek için geçerli sayaçların tümünü kaldırmaktır. Listedeki ilk sayacı seçin. Ardından listenin en altına kaydırın ve SHIFT tuşunu basılı tutarken son sayacı seçin. Tüm sayaçları seçtikten sonra, kaldırmak için Delete tuşuna basın.

Şimdi şu adımları kullanarak İşlem / % İşlemci Zamanı sayacını ekleyin:

  1. Perfmon'ın sağ bölmesinde herhangi bir yere sağ tıklayın ve Sayaç Ekle'yi seçin.
  2. process nesnesini genişletin.
  3. Listeden % İşlemci Zamanı ifadesini seçin.
  4. Örnek listesinden tüm örnekleri<>.
  5. Ekle'yi seçin.
  6. Tamam'ı seçin.

Artık, veri toplayıcı kümesinin çalıştığı sırada bilgisayardaki her işlem tarafından kullanılan işlemci süresinin grafiğini gösteren bir görüntüye sahip olacaksınız. En yüksek CPU düzeyinin hangi işlemi kullandığını yalıtmanın en kolay yolu Perfmon'un vurgulama özelliğini etkinleştirmektir.

Bunu yapmak için listedeki ilk sayacı seçin ve Ctrl + H tuşlarına basın. Bunu yaptıktan sonra, seçili işlem grafikte kalın bir siyah çizgi olarak gösterilir.

En fazla CPU kullanımını gösteren işlemi bulana kadar işlem listesinde aşağı gitmek için klavyenizdeki aşağı oku kullanın. Aşağıdaki ekran görüntüsünde, w3wp.exe işleminin makinede büyük miktarda CPU kullandığını açıkça görebilirsiniz. Bu, IIS uygulama havuzunun bilgisayarda yüksek CPU kullanımına neden olduğunu onaylar.

Performans İzleyicisi penceresini gösteren ekran görüntüsü. Perfmon, w3wp yürütülebilir dosyasının CPU kullanımını gösterir.

İpucu

Perfmon, uygulamanızdaki performans sorunlarını belirlemede çok yararlı olabilir. Perfmon günlüğünde toplanan veriler, kaç isteğin yürütülmekte olduğunu (ASP.NET ve ASP.NET Applications nesnelerini kullanarak) gösterebilir ve ayrıca uygulamanızın performansıyla ilgili diğer önemli performans verilerini de gösterebilir.

Yüksek CPU sorununun nedeninin köküne ulaşmak için DebugDiag kullanılarak oluşturulan dökümleri gözden geçirelim.

DebugDiag ile döküm analizi

DebugDiag, otomatik döküm analizi yaparak birçok sorunu tanıyabilir. Bu özel sorun için DebugDiag'ın Performans Analizi, yüksek CPU sorununun kök nedenini belirlemeye yardımcı olmaya çok uygundur. Çözümleyiciyi kullanmak için şu adımları izleyin

  1. DebugDiag'da Gelişmiş Çözümleme sekmesini seçin.
  2. Performans Analizörlerini seçin.
  3. Veri Dosyaları Ekle'yi seçin.
  4. Dökümlerin oluşturulduğu konumun tarayıcısı. Varsayılan olarak, bu C:\Program Files\DebugDiag\Logs klasörünün bir alt klasörü olacaktır.
  5. Dökümlerden birini seçin ve ardından Ctrl + A tuşlarına basarak bu klasördeki tüm dökümleri seçin.
  6. 'ı seçin.
  7. Çözümlemeyi Başlat'ı seçin.

DebugDiag'ın dökümleri ayrıştırıp bir analiz sağlaması birkaç dakika sürer. Analizi tamamladığında, aşağıdaki görüntüde gösterilene benzer bir sayfa görürsünüz.

Internet Explorer'ı gösteren ekran görüntüsü. Debug Diag analizi rapor sayfası gösterilir.

Raporun üst kısmında yüksek CPU algılandığının bildirildiğine dikkat edin. Sağ sütunda, ortalama CPU süresine göre ilk 7 iş parçacığına bağlantı içeren öneriler görürsünüz. Bu bağlantıyı seçtiğinizde en çok cpu kullananların ne yaptığı hakkında bilgi görürsünüz. Örneğin, aşağıdaki ekran görüntüsü bu iş parçacıklarının uygulamamda ne yaptığını gösteriyor.

Tarayıcıda İşlev İstatistikleri sayfasını gösteren ekran görüntüsü.

Bu örnekte, FastApp uygulamasındaki default.aspx sayfası çalışıyor. Çağrı yığınının (sayfanın en altında) daha aşağıya bakarsanız, bu thread'in dize birleştirme yapmakta olduğunu görebilirsiniz. (c0 çağrısına System.String.Concat içeren çağrı yığınına dikkat edin.) Diğer CPU iş parçacıklarını analiz ederseniz aynı deseni görürsünüz.

Sonraki adım, FastApp uygulamasının Page_Loaddefault.aspx sayfasında olayı gözden geçirmektir. Bunu yaptığımda aşağıdaki kodu buluyorum.

htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
    htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";

Bu tür kodlar kesinlikle yüksek CPU'ya neden olur.

Sonuç

Perfmon ve DebugDiag kullanarak, uygulama havuzlarındaki yüksek CPU'nun nedenini belirlemede yardımcı olabilecek verileri kolayca toplayabilirsiniz. Bu teknikleri kullanarak kök nedeni bulamıyorsanız daha fazla yardım için Microsoft desteğine başvurabilirsiniz. Microsoft destek mühendisleri sorununuzun nedenini belirleme konusunda size yardımcı olabilir. Bir servis talebini açtığınızda Perfmon verilerini ve dökümlerini hazır duruma getirmeniz sayesinde mühendislerin size yardımcı olması için gereken süreyi önemli ölçüde azaltmış olursunuz.

Diğer kaynaklar