14 Ekim 2014 Salı
3 Ağustos 2012 Cuma
IIS'e WCF Servis Deploy'unda BaseAddress
14 Ekim 2011 Cuma
Sharepointte “Exception of type 'System.OutOfMemoryException' was thrown.” şeklinde bir hata aldığınızda, sharepointin çalıştığı application pool’ un worker process sayısını arttırarak çözüm sağlayabilirsiniz.
Sharepointin çalıştığı sunucuda IIS Manager’ ı açıp, application pool’ un özelliklerinden, Performance sekmesinde gerekli ayarı yapabiliriz.
Microsoft KB: http://support.microsoft.com/kb/823547/en-us
Configuring Web Gardens with IIS 6.0 : http://technet.microsoft.com/en-us/library/cc784869(WS.10).aspx
30 Haziran 2011 Perşembe
IIS compression ayarları
IIS’te iki çeşit sıkıştırma mevcut: Static ve dynamic. Static sıkıştırma css dosyası gibi değişmeyen dosyalar için default 9 olarak belirtilmiş, yani maximum sıkıştırma. Çünkü bu tür dosyalar sunucu tarafında bir kez sıkıştırılıyor ve herkese bu sıkıştırılmış hali gönderiliyor. Dinamik sıkıştırmada ise durum farklı. Default değer 0 olarak belirtilmiş, yani az sıkıştır ama en kısa sürede sıkıştır denmiş. Dinamik sayfalar için en uygun sıkıştırma seviyesinin ne olacağı konusunda internette yaptığım araştırmaya göre bu seviyenin 3,5 ile 4 arasında olması en uygun görünüyor. Küsuratlı rakamlar kabul edilmediği için dinamik sıkıştırma için en uygun seviye 4 diyebiliriz. Bu durumda web server’in cpu’suna sıkıştırmadan kaynaklanan yükün yaklaşık %10’u kadar ek bir yük gelecek fakat sayfa boyutları eskisine göre %40’lara varan oranda azalacaktır. Kendi makinemde yaptığım testlerde sıkıştırma seviyesi 0 iken 288 Kb olan bir sayfa, bu seviyenin 4’e çıkarılması ile 181 Kb’a düştü. Dinamik sıkıştırma seviyesini aşağıdaki komutla değiştirebilirsiniz:
C:\Windows\System32\Inetsrv\Appcmd.exe set config -section:httpCompression -[name='gzip'].staticCompressionLevel:9 -[name='gzip'].dynamicCompressionLevel:4
IIS 7.5 classic mode performans ayarları
IIS 7.5'de classic mod kullanımında IIS 6 için geçerli olan default değerler kullanılmaktadır. Böyle bir durumda Microsoft'un, web uygulamalarının performansını arttırmak, beklemeleri önlemek amacıyla önerdiği birkaç değişiklik gerçekleştirilebilir.
Default değerler
<connectionManagement>
<add address="*" maxconnection="2" />
</connectionManagement>
<httpRuntime minFreeThreads="8" minLocalRequestFreeThreads="4" ... />
<processModel maxWorkerThreads="20" maxIoThreads="20" " minWorkerThreads="1" minIoThreads="1" ... />
Yeni değerler
<connectionManagement>
<add address="*" maxconnection="48" />
</connectionManagement>
<httpRuntime minFreeThreads="352" minLocalRequestFreeThreads="304" ... />
<processModel maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="10" minIoThreads="10" ... />
Bu değişiklikler şu anlama geliyor:
• maxconnection: Tek CPU için geçerli değer. Uygulama içinden bir web sayfasına veya web servisine aynı anda en fazla 2 istek gönderilebilir. 4 çekirdekli bir server için aynı anda en fazla 8 istek gönderilebilmesi demek. Entegrasyon ve raporlama gibi sık kullanılan servisler için kısıtlayıcı olabilir. Örneğin hastane uygulamalarında özellikle sabah saatlerinde SGK’dan hastalara provizyon ve takip numarası alırken bu ayar yapılmamışsa uzun kuyruklar oluşacaktır.
• minworkerthreads ve miniothreads değerlerinin 1 olmasından dolayı gelen istekle birlikte yeni bir threadin oluşturulup ayağa kaldırılması gerekmekte, bu da gecikme anlamına gelmektedir.
• maxworkerthreads ve maxiothreads'in de 20 olması çok kullanıcılı sistemlerde kuyruğa neden olabilir.
Default değerlerin kullanımından kaynaklanan herhangi bir bekleme, kuyruğa alma işlemi varsa bu değişiklikler sonrasında ortadan kalkacak ve CPU aynı anda daha fazla isteğe yanıt verebileceği için CPU kullanım oranı artacaktır. Bu durumda server’e bir kaç çekirdek daha eklenebilir.
IIS 7.5 integrated mode
Machine.config dosyasındaki processModel tag’inin önemi ortadan kalkıyor, örneğin maxworkerthread ve maxiothread gibi eskiden 20 olan varsayılan değerler cpu başına 100’e çıkarılmış durumda. Performansı etkileyebilecek yanlış bir default değer ise yine mevcut: maxConcurrentRequestsPerCPU. Bu değer default 12 olarak belirtilmiş. Microsoft’un tavsiyesi bu değerin 5000’e çıkarılması. Neden mi 5000? Okuduğum kadarıyla “büyük bir değer yapalım, ne olsun?” denmiş ve birisi 5000 demiş ve .Net Framework 4.0’da bu değer default 5000 olmuş. .Net Framework 4.0’dan eski bir versiyon kullanıyorsanız, aşağıdaki 12 olan değeri değiştirmeniz faydalı olacaktır.
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="12" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>