Apache Performans Ayarları (Performance tuning) Önerileri

Apache’de Performans ayarını yapmaya yeltenmişseniz, öyleyse bazı terimleri biliyor, bazı sorunlarla karşılaşmış, bazı sıkıntılar yaşıyor olduğunuz manasını çıkarıyorum çok rahatlıkla.

Öyle değilse de, bilgi iyidir, okuyunuz. 🙂

 

Apache, güzel(!) bir web serveri. Bir sürü de ayarı mevcut.

Burada bahsetmek istediğim konu, genel olarak hangi 3 ü 5 yapacağınız, hangi 200 yerine 50 yazacağınız ile ilgili değil. Yani hesapsal ayarlardan bahsetmeyeceğim. O apayrı ve ihtiyaca yönelik bir konu çünkü.

Peki bunlardan bahsetmeyeceksemne manası kaldı bu yazının?
Şöyle ki, Apache de performans ayarı yapmak istiyorasnız, hali hazırda yoğun çalışan bir veya birkaç apache web serveriniz olduğu yorumunu çıkarıyorum. Burada Sayısal değerler sistemden sisteme değişiklik göstermekte. Benim bir uygulamam session ve mysql bağlantısı bile kullanmadan, yoğun çalışıyorsa bu ayrı bir durum ve ayrı bir optimizasyon gerekiyor, veya veya veritabanı ve statik içerik durumu yoğun ise bu ayrı bir optimizasyon gerektiriyor.

Ben burada sadece bakış açısını izah etmeye çalıaşcağım.

Bu noktada bazı denemelerimiz oldu bunları paylaşmak isterim.

Apache istekleri karsılarken statik veya php isteklerinde, gelen isteklerin sayısıyla birlikte parabolik olarak artan bir grafik çiziyor. gelen istek arttıkça, makina load’u artarak artıyor ve bir süre sonra sistemi kitleyebiliyor. (%95 kitliyor emin olun.)

Statik dosyalar (Resimler, css, js, vb..)

Apache php isteklerini normal bir şekilde verirken, statik içerik devreye girdiğinde içeride açtığı portları iyi yönetemiyor. Bir web sitesinin bir sayfasında genelde 1 php isteği, 40-50 tane de statik içerik isteği oluyor. Bu noktada apache den dolayı saçlarımız dökülmeye başlıyor.

Statik içerik ile ilgili noktada cache için EXPIRES headeri göndermek ilk yapılacak şey olabilir.
Browser bir içeriği cachelese bile o dosya değişmiş mi diye server a soruyor. Bu noktada bu sorgu da request olarak bir maliyet oluşturuyor. Expıre cache i ile server browser a bu dosyaya verdiğiniz süre kadar değişmeyeceğinin garantisini veriyor, ve dosyalarınız değişmeyeceğinin teyidi alındığından browser o dosya cacheinde varsa, server a hiç sormuyor.

Bir değişiklik durumu için ise, statik dosyalarınızın sonuna ?time=2938748292 şeklinde bir timestamp koyarak çekmesini sağlyabilirsiniz. Örneğin bir dosyanız var ve normalde adı header.jpg . Siz bubunu EXPIRES ile cachelemesini söylerseniz, değiştirseniz bile browser eski dosyayı yeni gibi gösterecektir. Bu noktada siz isteği header.jpg?t=23984729493 şeklinde gönderirseniz, ve dosyanızı değiştirdiğinizde , bu timestampı da değiştirirseniz, veya dosya ismine bu timestampı kaydederseniz, browser cachelediği eski dosyayı bulamayacağından, yeni dosyayı çekmiş olacaktır.

Anlatmak istediğim, siz bir dosya değiştirmedikçei sayfanıza bir kere gelen kişi, 2. sorgudan itibaren gereksiz request göndermemeye başlayacak. 1 sayfa ilk açılışta 45 statik + 1 php = 46 request dersek,2. requestten itibaren 1 requeste inecektir. Bu da CİDDİ avantaj olacaktır.

Apachedeki gereksiz modüller

Apachenizde kullanmadığınız yani gereksiz modüller açık olabilir. Bunları kapatın. Neyi kullanıp neyi kullanmadığınızı araştırmanız biraz zzaman alabilir, ama bunların da küçük de osla bir miktar etkisini görürsünüz.

Apache .htaccess desteğini kapatın

.htaccess dosyaları çeşitli server ayarlarını yapabildiğiniz dosyadır. Buna ihtiyacınız yoksa, htaccess desteğini direkt kapatın. İhtiyacınız varsa da httpd.conf seviyesinden genel olarak yapmaya özen gösterin. Yani imkan varsa hiç kullanmayın. Ama zend framework gibi frameworkler mod_rewrite vb modüllerine ihtiyaç duyuyor diyorsanız da httpd.conf seviyesinden de ihtiyazınıcı görebiirsiniz. (Tabi ki yönetimi daha zor oluyor haliyle)

Apache htaccess desteği varsa, her requestte isteğin gittiği php dosyasına kadarki klasör ailesinde (örneğin /usr/local/php/deneme/example/html/index.php php sayfasına gelen requestte, sırasıyla usr, sonra local sonra php sonra deneme sonra example sonra html klasörlerinin içinde) .htaccess dosyası var mı? varsa load et kuralları çalıştır işlemini yapıyor. bu da tekil bir isteğin gecikmesine sebep olabiliyor. Bunu da kapatmanız sizi pembe bir gökyüzüne kavuşturmayacak ama bir miktar avantaj sağlayacaktır.

Bahsetmek istediğim daha çok şey var fakat, amaç burada bakış açısı olarak, kendinizi bilgisayar yerine koyarak düşünmektir. Böyle yaparsanız, belirli seviyeye kadar performansı artırabiirsiniz. Belirli seviye dememin sebebi ise, ileride bazı performans ihtiyaçlarınıza apachenin yeterli olmayacağını farkedeceksiniz. Bu zaman ise, apache’nin yerine ne koymamız gerektiğini konuşuruz. 🙂

3 Comments

    Apache Performans Ayarları (Performance tuning) Önerileri | Gökhan Tunçkale | Blog

    […] değilse de, bilgi iy… Devamı için : Apache Performans Ayarları (Performance tuning) Önerileri ShareFacebookTwitterStumbleUponMoreTumblrRedditLinkedInDiggEmailPrintLike this:BeğenBe the first […]

    Abdullah Pehlivan

    Merhabalar,

    Statik dosyalar için Expires Headers uygulaması nasıl yapılıyor peki? Mesela apis.google.com/js/plusone.js dosyası için nasıl bir kod eklemem gerekiyor .htaccess’e? Bu şekilde iki dosya var ExpHdrs eklemem gereken ama nasıl yapacağımı bilmiyorum malesef 🙂

      Emre Macit

      eğer dosyayı apis.google.com üzerinden çağırıyorsanız, zaten bişey yapmanıza gerek yok, zaten isteseniz de yapamazsınız. Ancak o dosyayı kendi dosyalarınızn yanına indirip, oradan vermeyi düşünüyorsanız yapabilirsiniz.

      malesef cevap yazmaya çok fazla vakit ayıramıyorum ancak; http://stackoverflow.com/questions/5531994/specifing-expiration-date-for-static-files-caches bu linkteki konuda istediğiniz şeyler var diye düşünüyorum.

Bir Cevap Yazın