IIS Aplication Pool‘un (w3wp) kaç process halinde çalışacağını belirten ayardır. Tam Türkçesi En Fazla Çalışan İşlem Sayısı şeklindedir. Default olarak 1’e ayarlıdır.

Genelde On Demand olmayan Always Running tipi çalışan uygulamalarda 1 process’in yükü taşıması performanslı olmayabilir. Ayrıca IIS’de default olarak pool’lar 29 saatte bir recycle (restart) edildiğinden uygulama yoğun zamanlarda geç ayağa kalkabilir. (Recycle işlemi pool ayarlarında düzenlenebilmektedir.)

Bunun önüne geçmek için yükü bölmek (IIS load balancing) iyi bir çözüm olacaktır. Yük bölme işlemi için birden fazla IIS sunucu kurabilir veya tek bir IIS üzerinde pool maksimum process sayısını arttırabilirsiniz.

Yük bölme işlemi için farklı nedenleriniz olabilir. Örneğin Uygulamanız On Demand’dır fakat istemci sayısı fazla olabilir.

Yalnız burda dikkat edilmesi gereken AspNet Session State (Oturum Durumu) modudur. Her iki yük bölme senaryosunda da uygulamaların Session bilgileri her bir sunucuda veya her bir process’de kalacaktır. Buda istemci isteklerinin cevaplanması sırasında farklı session bilgilerine erişilmesi ve dolayısıyla tutarsızlığa yol açacaktır.

Ortak session bilgilerine kayıt yapmak ve erişmek için iki yöntem söz konusudur. Birincisi IIS sunucuda (Bunun için sadece bu işlemi yapacak farklı özel bir sunucu da kurulabilir) session state servisinin aktif hale getirilmesi, ikincisi ise Sql sunucuda session state için bir veritabanı açılmasıdır. Her iki yöntem de çözüm olmakla birlikte performans olarak en uygunu sunucu session state servisinin aktif edilmesidir.

Adım Adım :

Görev Yöneticisinde w3wp.exe’ye ilişkin bir veya birden fazla process görürsünüz.

IIS Yönetim Panelinde Uygulama Havuzları (Application Pools) bölümünden bir Havuz’un (Pool) Gelişmiş Ayarlarına (Advanced Settings) girilir.

Burada en fazla çalışan işlem sayısı 4 olarak ayarlanmıştır. Siz de ihtiyacınıza göre ayarlayabilirsiniz.

Windows Servislerini açtığınızda ASP.NET State Service göreceksiniz. Başlangıç şekli Manual olduğundan bunu otomatiğe almanız sizin için faydalı olacaktır. Bu servis çalıştırılır.

State sunucu başlamıştır, IIS aplication pool birden fazla process halinde çalışmaya ayarlanmıştır. Ancak Uygulamanın State modu halen default olan In Proc durumundadır. Bununda değiştirilmesi gerekmektedir. Bu ister IIS yönetim konsolundan isterseniz web.config aracılığıyla yapılabilir.

Web.config ayarı

<system.web>

<sessionState mode="StateServer"
stateConnectionString="tcpip=localhost:42424"
cookieless="false"
timeout="20"/>

</system.web>

IIS Yönetim Panelinde ise

Türkçe versiyonda Oturum Durumu olarak geçer.

Bu ayar web.config ile yapılıyorsa System.Web bölümü altına yapılmalıdır. IIS Yönetim konsolu ile yapılıyorsa konsol bunu gerekli alana yerleştirecektir. Burada stateConnectionString belirteci ile tcpip kullanılarak localhost adresine bağlanılmıştır. Default olarak Asp.Net State Servis localhost altında 42424 portunda çalışır.

Birden Fazla sunucunun 1 state servisine bağlanması durumu için ek olarak alt kısımda anlatılanlar da yapılmalıdır. Ancak çoğu zaman üst kısımda anlatılan max worker process yani pool için process sayısının arttırılması çözümdür ve birden fazla sunucu ile bir düzenleme yapılmasına gerek olmamaktadır.

Asp.Net State servisine dışardan (Remote) bağlantı almak istiyorsanız ki birden fazla sunucu veya farklı sunucularda bu servislerin bulunduğu durumlarda gereklidir. Eğer buna gerek duymuyorsanız remote erişime servisi açmayınız.

Remote için Registry’de ayar yapmanız gerekmektedir.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection

Default olarak localhost için “0” (Sıfır) ayarlıdır. Bu ayarı “1” yaptığınızda session state servisinin localhost dışından erişime açılacaktır. Bu registry dizininde ayrıca Port ayarı da bulunmaktadır.

Asp.Net State servisinin dışarıya açılması ve birden fazla sunucunun bu servise bağlanması durumunda eğer aynı uygulama çalıştırılıyorsa hostlar için makina anahtarlarının aynı olması gerekmektedir. Bu senaryo için makina anahtarı önemlidir.

Burada Anahtarları Oluştur seçilerek 1 sunucu için oluşturulduktan sonra diğer sunucularda aynı anahtar verilmelidir.

Birden fazla sunuculu yapılarak yükün nasıl dağıtılacağı belirlenmiş olmalıdır. Burada bir load balancer veya DNS yük bölme işlemi kullanılabilir. En kolay ve zahmetsiz olanı DNS yük bölme işlemidir.

Örneğin portal.domain.com şeklindeki uygulamanız için bunu ayarlıyorsunuz. DNS sunucuda Portal adresi için birden fazla ip adresi tanımlamanız gerekmektedir.

Yapacağınız yapılandırma işlemi size bazı kolaylıklar sağlayacaktır ancak yaptığınız işlemler sizin sorumluluğunuzdadır. Test ve kontrollerinizi yapmadan hiçbir düzenlemeyi devreye almayınız.

Kategoriler: IIS

7 yorum

Ozan · 22 Kasım 2018 10:34 tarihinde

Ne zamandır arıyordum eline sağlık hocam. 🙂

    Abdurrahman · 22 Kasım 2018 10:55 tarihinde

    Teşekkürler.. İşinize yaramasına sevindim 🙂

Serden · 16 Mayıs 2019 13:05 tarihinde

Güzel bir bilgilendirme olmuş.

Alper Aktaş · 06 Ocak 2022 14:41 tarihinde

Hocam aynı ayarları yapıyorum fakat sessionları tutmuyor yinede. Server 2019 üzerinde deniyorum.

    Abdurrahman · 21 Mart 2022 00:38 tarihinde

    Sessionların tutması için makinalarda sitenin iis ayarlarında doğrulama ve çözme anahtarları aynı olmalıdır. Makalemin sonunda bahsedilmektedir.

semih can · 26 Ağustos 2022 02:33 tarihinde

Sayfa loadlarım çok yavaştı. Sunucu ilk yanıt süresi çok uzundu. Akşama kadar uğraştım ama en sonunda sizin makaleniz sayesinde düzelttim. maksimum process sayım 1000 miş. Teşekkürler

    Abdurrahman · 08 Ekim 2022 19:54 tarihinde

    Problemin çözülmesine sevindim. Process olarak 1000 çok çok fazla. Bu değer default 1’dir. 2,4,6 max worker process önerilir fakat daha fazlası demek daha fazla ram ve diğer kaynakların kullanılması demektir. Uygulamaya, sunucu donanımına ve şartlara göre ayarlanabilir. Queue Length 1000 olup worker process 2 veya 4 de denenebilir.

Yorumlar kapatıldı.