Windows sistemler üzerinde Shared Hosting ile uğraşırken kendime aldığım notları blog’a yazayım dedim malum bilgisayarımda bir yerde unutulup gider ve bende her seferinden amerikayı yeniden keşfetmek zorunda kalırım. Bundan sonra sunucu kurmadan önce aşağıdaki ayarlara bir göz atıp ona göre ayar çekeceğim buda bana referans olsun ;)
Sunucu Geneli
Shared Hosting için bazı servislere ihtiyaç yok boşu boşuna çalışmasınlar.
net stop <servis-ismi> ile kapatılabilir.
Alerter, ClipBook, DHCP Client, DHCP Server, Fax Service, File Replication, Infrared Monitor, Internet Connection Sharing, Messenger, NetMeeting Remote Desktop Sharing, Network DDE, Network DDE DSDM, NWLink NetBIOS, NWLink IPX/SP, Print Spooler, Telephony, Telnet, Uninterruptible Power Supply
Ekran Kouyucusunu kaldır.
Sunucu adını mantıklı bir şeyler koy. Değiştir.
Sunucu saatini kontrol et.
Sunucuya login olunduğunda direkt "Server Manager" consolu açılıyor bunu en alttan."Do not show me console at logon" seçeneğini işaretle. Çıkmasın.
Server Manager console’unda "Security" kısmında "Configure IE ESC" diye bir link var ona tıkla. Administrator için Security Configurasyonu "Off" yap. Yoksa Ekplorer kabusa dönüşüyor. User için açık kalsın ama.
"Notification Area Icons" her zaman tüm iconları göstersin. Her zaman try-icon’ları görmek lazım.
Shared Hosting sunucularında "Sound"’a gerek yok disale et control panel’den.
File Explorer’da Display file size information in folder tips check‘ini kaldır. Dosya listelenmesini yavaşlatıyor.
File Explorer’da Show hidden files seçeneği işaretli olsun.
File Explroer’da Hide empty drives işaretini kaldır. Lazım olur.
File Explorer’da Hide extensions for known files types işaretini kaldır yoksa çok yanıltıyor. Birde neyin ne olduğunu görmek lazım.
File Explorer’da Show pop-up description for folder and desktop items seçeneğini kaldır. Gerek yok.
Internet Explorer’dan Show friendly HTTP error messages seçeneğini kaldır Classic ASP hatalarını görüntüleyemiyorsun yoksa.
Disk üzerindeki "Write Caching" özelliğini aktifleştir. Disk > Özellikler > Hardware > Policies altında.
Sunucunun http protokolünde nasıl davranacağını belirleyen registry-key’i.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTP altındaki ayarlardan değiştirilebiliyor.
UriEnableCache: Sunucu çok yoğun http isteği altındaysa 1 yapılmalı.
UriMaxCacheMegabyteCount: 0 ise boyutu işletim sistemi ayarlar. 0 kalsa iyidir.
UriMaxUriBytes: http.sys her url’yi cache almasın diye kullanılır. Yüksek boyutlu URL’ler her zaman olmayacağından düşük tutmakta fayda var. 256KB uygundur.
UriScavengerPeriod: Cache’ alınan url’lerin çalışmayanlarını cache’den siler. Saniye cinsinden değer alıyor. 120sn’de bir kontrol et gibi. Ben 300 yaptım.
NTFS
NtfsDisableLastAccessUpdate
HKLMSystemCurrentControlSetControlFileSystem
Bu değer bir dosya veya dizinin son erişim tarihini tutar. Aslında bir çok şey için gereklidir (öreğin: incremental backup veya butür olaylar.) fakat kapatıldığında sağlam bir I/O performansıda elde edilebilir. Sunucusuna göre değişebilir sadece loglama yapan dummy bir sunucu ise kapatılabilir. Shared Hosting’de kapatılması pek doğru değil. Bir hacklenme olayında dosyanın sonerişim tarihini bilmek gerekebilir.
NtfsDisable8dot3NameCreation
HKLMSystemCurrentControlSetControlFileSystem
Bu ayar biraz tehlikeli. Windows bir dosya veya klasör yaratıldığından aynı zamanda MS-DOS isminide açıyor yani 8.3 ile tabir edilen olay. Bu değer 1 yaptığında dosya işlemlerine 8.3 kuralı sokulmadan devam edliyor normal olarakda daha performanslı oluyor fakat bazı uygulamalar 8.3 kuralına göre dosya işlemleri yapabiliyor. Bilemedim ne yapalım? fsutil aracı ile ayar çekiliyormuş ayrıca.
AsynchronousCredits
HKLMSystemCurrentControlSetServicesLanmanServerParameters(REG_DWORD)
IIS için iyi bir şey varsayılan olarak 512 ama duruma göre arttılabilir. Ben 1024 yaptım.
AdditionalCriticalWorkerThreads
HKLMSystemCurrentControlSetControlSession ManagerExecutive(REG_DWORD)
Sunucu güçlüyse arttırılabilir. Önbellekteki dosyaların işlenmesi ile alakalı, ne kadar arttırılırsa o kadar iyi tabi sunucu kaynaklarını göz önüne alarak. Microsoft amca 16 öneriyor fakat 64 iyi gibi oldu testlerde. Burdan baktım: http://msdn.microsoft.com/en-us/library/cc615012(v=bts.10).aspx
MaxThreadsPerQueue
HKLMSystemCurrentControlSetServicesLanmanServerParameters(REG_DWORD)
Varsayılan 20. Eşzamanlı isteklere cevap verirken açılan threadlere ayar veriyor. Kapasiteye bağlı arttırılabilir. Ne olur ne olmaz Shared sunucularda 64 yaptım. Duruma göre arttırılır ama azaltılması yavaşlatır.
Windows System Resource Manager’ı kur servislerin kullanabileceği CPU ve RAM limitlerini zorlayabilirsin. ApplicationPool bazında bir türlü çalıştıramadım. Çalıştıran olursa haberim olsun.
IIS 7.5
IIS 7.5 için genelde ayarlar %SystemRoot%system32inetsrvconfigapplicationHost.config altından yapılabilir.
system.webServer/caching
Eğer http istekleri az ise bunu kapatmakta fayda var fakat web server yoğun şekilde kullanılıyorsa açmak lazım. Restart gerekmez.
system.webServer/httpCompression
Sunucuda kullanılan bandgenişliğini azaltabilir fakat CPU kullanım oranınıda yükseltir.
Directory özelliği %SystemDrive%inetpubtemp
IIS Temporary Compressed Files. değerini alıyor. Bunu her siteye özgü ayarlamak lazım.
doDiskSpaceLimiting: Shared hostinglerde kullanılması gereken bir özellik. Müşteriye verilen disk kapasitesinin yanı sıra compression limitininde verilmesi lazım. True yap değerini.
maxDiskSpaceUsage: Siteye göre ayarlamak lazım. Default 100MB geliyor.Sunucu CPU’su ortalamanın altındaysa direkt httpcompression özelliğini kapat.
system.applicationHost/log
Sunucuya en çok yük getiren IIS modülü log modülüdür. Hem CPU, hem disk I/O’su hemde disk boyutu kaynaklarına etkisi vardır.
En az kaynak tükeden loglama yolu Binary olarak tek bir log dosyası tutmak ve günün sonunda onu işlemek oluyor. IIS üzerinden log modülümü "Site" değerinden "Server" değerine çekip ayarlanabilir. Böyle olunca shared hosting’de siteye özel loglar müşteriye verilemez. ek olarak üçüncü party bir log parse aracı gerekiyorki logları anlamlandırabilsin.
system.applicationHost/log/centralBinaryLogFile altındaki değer enabled = "True" olması gerekiyor.
system.applicationHost/applicationPools/applicationPoolDefaults
queueLength: applicationpool’a ne kadar istek geleceğini belirlersin. 1000’den sonra 503 hatası veriyor. Standart web sitesi için 1000 fena değil. Shared hosting’de en fazla 5000 en az 2000 yapılmasını öneririm.
enable32BitAppOnWin64: Tamamen 64bit çalışan bir web uygulaması varsa False yapılması lazım. Fakat hem 64bit, hem 32bit çalışan bir web uygulamasında True yapılması lazım. Bu durumdaki dez avantaj ise True olduğunda en fazla 4GB bellek kullanabilir 64bit olsa bile.
allowSubDirConfig: Bu web sitesinin çalışmasına bir maliyet daha getiriyor. Gerekli olmayan web sitelerinde kaldırmak lazım. IIS her path isteğinden web.config dosyası arıyor bulursa işletiyor. Bence kapatılması lazım.
system.webServer/asp/cache
diskTemplateCacheDirectory: Default %SystemDrive%inetpubtemp
ASP Compiled Templates olarak geliyor. Shared Hosting’de siteye özel path tanımlamak lazım.
maxDiskTemplateCacheFiles: Cache dizininde kaçtane dosya tutulacağını belirler. Bazı kaynaklarda sıfıtr değeri girin hiç tutmasın asp daha performanslı çalışır diyor. Bazısıda 0x7FFFFFFF değerini yani 2147483647 değerini verin diyor. Cache’in Asp performansını arttırdığı kesin en yüksek değer verilirse bol, bol cachelensin derim. Sıkınyı yok.
system.webServer/asp/limits
processorThreadMax: Default 25 geliyor ama tam değeri belirlemek çok zor uygulamaya bakarak optimum değer verilebilir. Bu değer kısaca ASP’nin çalıştırabilceği Thread sayısını belirliyor. Shared hosting için sunucu daki CPU Sayısına göre değer yükseltebilir. Örneğin : 8 Core varsa 50 yapılabilir.
system.webServer/asp/comPlus
executeInMta: Default olarak False geliyor. Shared Hosting veriyorsanız True olması gerekli her ASP uygulaması için ayrı bir Multithread yapı oluşturarak kendi içindeki COM +hatalarınıdan diğer ASP uygulamalarının etkilenmemesini sağlar. Stabilite için True yap.
Asp.Net için Registry Ayarları:
.Net 2.0
HKEY_LOCAL_MACHINESoftwareMicrosoftASP.NET2.0.50727.0Parameters
.Net 4.0
HKEY_LOCAL_MACHINESOFTWAREMicrosoftASP.NET4.0.30319.0Parameters
anahtarının altından yapılabilir. Böyle bir anahtar yoksa yarat.
MaxConcurrentRequestPerCpu: Bu değer ASP.NEt isteklerinin aynı anda kaçtanesinin işletilebileceğini belirler. Varsayılan olarak 12 dir Shared Hosting’de arttırmakta fayda var. 32 yaptım. Şu yazıyı oku ona göre karar verirsin http://haidersabri.com/2008/06/05/scalable-rest-services-in-wcf/
system.applicationHost/applicationPools/ApplicationPoolDefaults/recycling/periodicRestart
Shared Hosting’de çerçevelerinin belirlenmesi gereken bir özellik. ApplicationPool’un hangi durumlarda yeniden başlatılacağını belirler. Genelde değerleri bol keseden vermek lazım ki oto, boka recycle olup müşterinin sessionları kaybolmasın.
memory: KB cinsinden değer alıyor. Shared Hostinglerde sunucuda Ram sıkıntısı yoksa 2GB yapılabilir (AppPool’da 32bit enable yapmıştık ya) . Fakat site sayısı fazla ise 600MB yapıyorum. Shared Hosting’de bir site 600MB’dan fazla ram kullanıyorsa zaten VPS’e yönlendirmek lazım.
requests: memory az kullanabilir fakat uygulamaya gelen istekler çok fazla olabilir. Bu durumda da CPU kullanımı veya bandwidth kullanımı normalin dışında olabiliyor. Shared Hosting için 2000 request olunce recycle etmesi sunucu stabilitesi için iyi olur.
(queueLength ile bir alakası var mı incele)
time: bu zamana bağlı recycle işlemi sağlıyor fakat Shared Hosting için pek kullanışlı değil. Default 29:00 demişler hiç elleme.
IIS 7.5 için IIS 6.0 bileşenlerini kesinlikle yükleme http protokolünde veya handling’de kötü performansa neden oluyor.
Kaynaklar:
Windows Server Performance Team Blog
http://blogs.technet.com/winserverperformance/
Windows Sysinternals
http://technet.microsoft.com/sysinternals/default.aspx
10 Tips for Writing High-Performance Web Applications
http://go.microsoft.com/fwlink/?LinkId=98290
How to disable the TCP autotuning diagnostic tool
http://support.microsoft.com/kb/967475