Yazılım Notları
Bilgi Paylaştıkça Çoğalır...

Asp. Net Uygulamasının Performansını Nasıl Artırırsınız

Asp.NET Uygulamasının Performansını Nasıl Artırırsınız. Uygulama sunucusunda CPU tüketimi çok yüksek olan bir ASP.NET uygulamasının performansını nasıl yükseltirsiniz. Best practice.

ASP.NET üzerinde veri tabanı uygulaması geliştirirken dikkat edilmesi gereken temel noktaları aşağıdaki şekilde listeleyebiliriz.

  1. Öncelikle İş Analizinin çok iyi yapılmış olması gerekir. İyi bir iş analistinin taşıması  gereken en temel özelliklerle ilgili yazıyı buradan okuyabilirsiniz.
  2. Veri tabanı tasarımının mümkün olduğu kadar normalizasyon kurallarına uygun bir şekilde yapılmış olması gerekir. Tabi ki raporlama ile ilgili veri tabanı sorgulamaları yapılıyorsa, bu durumda veri tabanını denormalize etmek gerekebilir.
  3. Veri tabanı tablolarında uygun ve yeterli sayıda indekslerin oluşturulmuş olması gerekir. Bu indeksler üzerinde fragmantasyon oranlarının zaman içinde artacağı düşünülerek bu durumda rebuild edilmesi gerekir. Genel kabul olarak index lerin fragmantasyon oranlarının % 36 seviyesinin üstünde olması durumunda rebuild edilmesi fayda sağlayacaktır. Indekslerin fazla olması durumunda bu tablolara INSERT yapılacağı zaman performans düşüşüne sebep olabilir. Bu nedenle gereksiz yere index oluşturulmaması önemlidir.
  4. Yazılım gelliştirilirken de dikkat edilmesi gereken birçok nokta var aslında. Bu makalede örnek bir durum ele alacağız.

 

Örnek Durum: Şöyle bir yazılım uygulaması düşünün

  1. Internet üzerinden üyelik sistemi ile proje başvurusu alan bir sistem
  2. İş Analizi iyi yapılmamış
  3. Veri tabanı tasarımı normalizasyon kurallarına uygun olarak yapılmamış,
  4. Web tabanlı bir yazılım
  5. Yazılım uygulamasında Ajax kontrolleri etkin bir şekilde kullanılmamış. Bu nedenle, hem JavaScript hataları alınıyor, hem de sayfanın en ufak bir kısmında küçücük bir iş için bile bütün sayfa postback oluyor.
  6. Yazılım uygulamasına login olunduğu anda, bu kişinin proje başvurusuyla ilgili bütün bilgiler veritabanından ilk seferde (ihtiyaç olduğu anda değil) çekiliyor ve tamamı InProc Session da tutuluyor.
  7. Yazılım uygulamasında 20 sayfa var. Aslında bunlar webform olarak tasarlanmamış, hepsi bir usercontrol olarak tasarlanmış ve aynı webformun içine eklenmiş. Dolayısıyla webform load olurkenbütün usecontroller tüm property leri ile birlikte yükleniyor.
  8. Veri tabanından çekilen bilgilerin içinde veritabanında binary olarak tutulan pdf ler dahi var.
  9. Bir proje başvurusu ile ilgili çekilen bu verinin miktarı login olan kişi başıma 3 MB seviyesinde

Uygulama Sunucusu Donanımı:

  1. İşlemci : 4core x 4 = 16 CPU
  2. RAM : 32 GB
  3. Network Hızı : 1 Gps

Problem:

Sisteme login olan ilk kişi sistemi kullanmaya başladıktan sonra Uygulama Sunucusunda CPU kullanım oranı %95 seviyesine yükseliyor ve bir sonraki kişi login ekranın açılması(load olması) için bile yaklaşık 2 dak. beklemek zorunda kalıyor.

Kullanıcı adı ve parolasını girdikten sonra GİRİŞ tuşuna bastığında da login olmak için de ayrıca 2 dakika bekliyor.

 

YAZILIM ÇALIŞMIYOR!!!

ALTERNATİF ÇÖZÜMLER:

  1. Sunucu sayısı artırılabilir. Aynı sorunlar her sunucu için tekrar yaşanacaktır. Çünkü sorun sunucuda değil, yazılımda
  2. Sunucu CPU sayısı artırılabilir. 32 CPU ya çıkarıldığında ortalama CPU kullanım oranını hala % 95 seviyesine çıktığı görüldü.
  3. Uygulamanın InProc Session üzerinde tuttuğu veriyi, SQL-Server üzerinde tutulması sağlanabilir. Bu yapıldıktan sonra da Uygulama ApplicationPool'u üzerinde Maximum Worker Processes sayısını artırabiliriz. Bu şekilde, çok büyük boyuttaki(her login olan kişi için yaklaşık 3 MB) verinin SQL Server üzerindeki bir Sessionda tutulması sağlanmış olacaktır. Bu da uygulama sunucusunun CPU kullanım oranını azaltacaktır. Belki Veri tabanı sunucusu ile uygulama sunucusu arasındaki trafik bir miktar artacaktır ancak bu da Network hızının çok yüksek olması sayesinde tolere edilebilecektir.

SEÇİLEN ÇÖZÜM

3ncü alternatif çözüm tercih edilmiştir. Buna göre, sırayla aşağıdaki işlemler yapılmıştır:

  1. Command Prompt açılır.
  2. d:\Windows\Microsoft .NET\FrameWork\v2.0.50727 dizinin altına gidilir ve aşağıdaki komut çalıştırılır.
  3. aspnet_regsql -S [Veri Tabanı Sunucusunun Adı ya da IP Adresi] -U [Veri tabanı Kullanıcı Adı] -P [Parola] -ssadd -sstype p
  4. SessionStateDB
  5. Uygulama Sunucusu üzerinde uygulamanın web.config dosyası üzerindeki sessionState de aşağıdaki şekilde olmalıdır:

    <sessionState mode="InProc" timeout="20" allowCustomSqlDatabase="" allowCustomSqldatabase="true" sqlConnectionstring="Data Source=VeriTabanıSunucuAdi;User Id=KullaniciAdi; Password=Parola" cookieless="false"></sessionState>

  6. Uygulama Sunucusu üzerinde IIS üzerinden ilgili Application Pool gelişmiş özellikleri (Advanced Settings) açılır ve buradaki Maximum Worker Processes sayısı yükseltilir. Örneğimizde 32 CPU su olan sunucuda bu sayı 8 Olarak kaydedilmiştir.
  7. IIS-Application Pool

 

KAZANIMLAR / ELDE EDİLENLER

  1. Uygulama sunucusu ortalama CPU kullanım oranı % 18 lere düşmüştür.
  2. Login sayfasının yüklenmesi süresi 0.1 saniyeye düşmüştür.
  3. Login geçiş süresi 3 sn. ye düşmüştür.
  4. Uygulamadaki performans sorunu tamamen ortadan kalkmıştır.
  5. InProc üzerinde session tutulmadığı için Uygulama sunucusu CPU kullanım oranında açık bir şekilde iyileşme görülürken, bu sunucunun RAM kullanım oranı artmıştır(istenen limitler dahilinde).

 

 

MUTLU SON! smiley

 

 

Banka Hesap Numaralarınızı, IBAN Numaralarınızı bir kere telefonunuza kaydedin. İhtiyaç duyduğunuzda elinizin altında olsun.

Banka Hesaplarım

En Güzel Sözler Uygulaması İçin


En Çok Rating Alanlar
Ana Sayfa       Arama       Valid CSS!