Apache sunucu optimizasyonu nedir? nasıl yapılır? konusunu sizler için derliyoruz. Apache sunucunuzdan en yüksek performansı almak, Web sitenizin nasıl çalıştığı ve yarattığı izlenim konusunda bir fark yaratabilir.
Apache Sunucu Optimizasyonu
DOĞRU MPM’Yİ SEÇME
Apache, özellikleri kolayca ekleyip kaldırabileceğiniz modülerdir. Çoklu İşlem Modülleri (MPM’ler), Apache’nin çekirdeğinde bu modüler işlevselliği sağlar – ağ bağlantılarını yönetir, bağlantı noktalarına bağlanır ve istekleri gönderir. MPM’ler iş parçacığı kullanmanıza ve hatta Apache’yi farklı bir işletim sistemine taşımanıza izin verir.
Sadece tek MPM olabilir aktif bir anda ve birlikte statik derlenmiş olmalıdır:
--with-mpm=(worker|prefork|event)
İstek başına bir işlemin geleneksel modeline prefork denir. Daha yeni, iş parçacıklı bir model, daha düşük ek yük ile daha iyi performans elde etmek için her biri birden çok iş parçacığı içeren birden çok işlem kullanan işçi olarak adlandırılır. Son olarak, event MPM, farklı görevler için ayrı iş parçacığı havuzlarını tutan bir modüldür.
- Şu anda hangi MPM’yi kullandığınızı belirlemek için,
httpd -V
- Hangi Apache modüllerinin derlendiğini görmek için
httpd -l
Kullanılacak doğru MPM’yi seçmek birçok faktöre bağlıdır. Prefork daha güvenli bir seçimdir; Workeri seçerseniz dikkatli testler yapmalısınız. Performans kazanımları, dağıtımınız ve donanımınızla birlikte gelen kitaplıklara da bağlıdır.
- Worker MPM
Her biri birden çok iş parçacığına sahip olabilen birden çok alt süreç kullanır. Her iş parçacığı bir seferde bir bağlantıyı yönetir. Çalışan, genellikle 2.4’ten önceki Apache sürümlerini çalıştıran yüksek trafikli sunucular için iyi bir seçimdir, çünkü prefork MPM’den daha küçük bir bellek ayak izine sahiptir. Ancak, iş parçacığı güvenli olmayan kitaplıklarla uyumsuzluklar nedeniyle zarar görür. - Event MPM
Worker MPM gibi iş parçacıklıdır, ancak bazı işleme işlerini destekleyen iş parçacıklarına aktararak, ana iş parçacıklarını yeni istekler üzerinde çalışmak üzere serbest bırakarak daha fazla isteğin aynı anda sunulmasına izin vermek için tasarlanmıştır. Event MPM, SSL bağlantıları durumunda çalışan MPM ile aynı şekilde çalışır. Apache, Event MPM altında kullanıldığında en düşük kaynak gereksinimlerine sahiptir. Olay MPM yalnızca gelen Apache 2.4 - Prefork MPM
Her biri bir evreye sahip birden çok çocuk süreç kullanır. Her işlem bir seferde tek bir bağlantıyı idare eder. Birçok sistemde, prefork hız açısından çalışanla karşılaştırılabilir, ancak daha fazla bellek tüketir. Prefork’un dişsiz tasarımı bazı durumlarda işçiye göre avantajlara sahiptir: Prefork en güvenli modüldür ve iş parçacığı güvenli olmayan üçüncü taraf modüllerle kullanılabilir. Prefork MPM, zayıf iş parçacığı hata ayıklama desteğine sahip platformlarda hata ayıklamak için daha kolaydır.
Hangi MPM’yi seçerseniz seçin, onu uygun şekilde yapılandırmanız gerekir. Genel olarak, bir MPM’nin yapılandırılması veya performansının ayarlanması bir hayli zordur.
DİĞER MPM SEÇENEKLERİ
İsteğe bağlı mod_mpm_itk
Apache modülü, Apache işleminin isteğe yanıt vermeden önce etki alanı sahibinin kullanıcı tanımlayıcısına (UID) ve grup tanımlayıcısına (GID) geçmesine neden olur. Bu, her kullanıcının dosyalarını diğerlerinden standart dosya izin ayarlarıyla izole etmesine olanak tanır. Esasen her sankon’un doğrudan kendi yapılandırma dosyasında yalıtılmasına izin verir.
ITK’nın temel sınırlaması performansında yatmaktadır, çünkü her sorgu için, özellikle Prefork veya Worker MPM ile karşılaştırıldığında performansı düşüren bir süreç yaratır ve sonra yok eder.
mod_mpm_itk
bağımsız bir MPM olarak çalışmaz. Ayrı olarak kurulması gereken MPM ITK modülünü kullanmak için prefork MPM’yi kurmanız gerekir.
mpm_winnt
Apache’nin Microsoft Windows işletim sistemine entegrasyonunun bir parçasıdır. Bu sistem tipinde Apache kullanılırken bu MPM’nin kullanılması bir gerekliliktir.
Kullanılabilir başka deneysel MPM’ler de vardır, ancak bunları bir üretim ortamında kullanmanızı önermiyoruz.
APACHE.CONF’U BULMA
Başlamak için, Apache yapılandırma dosyasını bulup açın ve MPM yönergeleri bölümünü bulun:
- CentOS / RHEL / Fedora :
/etc/httpd/conf/httpd.conf
- Ubuntu / Debian :
/etc/apache2/httpd.conf
- DirectAdmin :
/etc/httpd/conf/extra/httpd-mpm.conf
- cPanel :
/etc/apache2/conf.d/httpd.conf
- Plesk :
/etc/httpd/conf/
Nano, vi veya vim kullanıyorsanız: dosyayı açtıktan sonra, dosyada gezinerek yönergeleri bulabilirsiniz. VI veya VIM kullanarak, eğik çizgi ‘/’ yazıp tam olarak aradığınız dizeyi yazarak da arama yapabilirsiniz (arama büyük / küçük harfe özeldir).
Aşağıda, MPM ön çatal modülü için örnek bir yapılandırma bulabilirsiniz:
#nano /etc/httpd/conf/httpd.conf <IfModule mpm_prefork_module> StartServers 4 MinSpareServers 20 MaxSpareServers 40 MaxRequestWorkers 200 MaxConnectionsPerChild 4500 </ IfModule>
Düz RHEL veya Debian tabanlı sistemlerde MPM’yi değiştirmek için sırasıyla veya mpm_prefork_module
ile değiştirin. mpm_worker_module
mpm_event_module
Gelen DirectAdmin’e MPM modülü kullanılarak seçilebilir. Custombuild
veya düzenleyerek/usr/local/directadmin/custombuild/options.conf
cPanel yöneticileri aşağıdakileri yaparak MPM’yi değiştirebilir. WHM > Home > Software > EasyApache 4
MPM YÖNERGELERİ
Aşağıda, 3 MPM modülünün tümü için Apache belgelerine bağlantılar bulabilirsiniz:
STARTSERVERS (PREFORK, EVENT, WORKER MPM)
Başlangıçta oluşturulan alt sunucu işlemlerinin sayısını ayarlar. İşlemlerin sayısı yüke bağlı olarak dinamik olarak kontrol edildiğinden, sunucunuzu sık sık yeniden başlatmadığınız ve yeniden başlatma sırasında çok sayıda istek içermediği sürece, bu parametreyi ayarlamak için genellikle çok az neden vardır.
İpucu: Bu değeri içinde ayarlanmış olana yansıtın MinSpareServers
MİNSPARESERVERS (PREFORK MPM)
İstenen minimum boşta kalan çocuk sunucu işlemi sayısını ayarlar. Boşta olan bir süreç, bir talebi ele almayan, ancak yeni bir talebi bekleyen bir süreçtir.
Boşta olan daha az yedek sunucu varsa, bu değerle belirtilirse, üst süreç saniyede maksimum 1 hızda yeni çocuklar oluşturur. Apache 2.4’ten itibaren, bu oran katlanarak 1’den başlayıp saniyede 32 çocuğun ortaya çıkmasıyla sona eriyor.
Bunun yararı, bir talep geldiğinde boşta kalan bir iş parçacığı alabilmesidir; bir iş parçacığı yoksa, Apache’nin yeni bir çocuk üretmesi, kaynakları ele geçirmesi ve isteğin gerçekleşmesi için gereken süreyi uzatması gerekir.
Woktron, bu ayar için değerin aşağıdaki şekilde ayarlanmasını önerir. Bu değerler, takılı olan toplam bellek (RAM) miktarına bağlıdır:
- Sanal Özel Sunucu 5
- 1-2 GB RAM 10 ile ayrılmış sunucu
- 2-4GB RAM 20 ile ayrılmış sunucu
- 4+ GB RAM 25 ile özel sunucu
Bu parametrenin yüksek bir sayıya ayarlanması, çok yoğun web siteleri içermediği sürece, neredeyse her zaman kötü bir fikirdir.
MAXSPARESERVERS (PREFORK MPM)
İstenen maksimum boşta çocuk sunucu işlemi sayısını ayarlar. Boşta olan bir süreç, bir talebi ele almayan, ancak yeni bir talebi bekleyen bir süreçtir.
MaxSpareServers
Boşta kalandan daha fazlası varsa, üst süreç fazla işlemleri öldürecektir. Bu sayıdan daha fazla boşta işlem varsa, bunlar sonlandırılır.
Eğer MaxSpareServers değer, daha MinSpareServers Apache otomatik olarak ayarlanır MaxSpareServers eşit MinSpareServers artı bir.
Web siteniz aşırı derecede meşgul olmadığı sürece, boştaki işlemler değerli kaynakları tüketeceğinden bu sayı çok yüksek ayarlanmamalıdır.
SERVERLİMİT (PREFORK, EVENT, WORKER MPM)
Gelen prefork ServerLimit
yönergesi üst limitini temsil etmekte MaxRequestWorkers. Bu ayar genellikle MaxRequestWorkers’ı değiştirirken giriş hatalarına karşı bir koruma veya tavan olarak kullanılır.
Prefork MPM ServerLimit ile yalnızca 256’dan (varsayılan) MaxRequestWorkers
daha yüksek bir değere ayarlamanız gerektiğinde kullanılır. Bu durumda, MaxRequestWorkers için belirlediğiniz değerle eşleşmelisiniz, ancak bu direktifin değerini MaxRequestWorkers’ı ayarlamak isteyebileceğinizden daha yüksek bir değere ayarlamamalısınız.
THREADLİMİT
Bu yönerge ThreadsPerChild
, Apache httpd sürecinin ömrü boyunca en yüksek yapılandırılmış değeri belirler. Yeniden başlatma sırasında bu yönergeyi değiştirme girişimleri dikkate alınmaz, ancak ThreadsPerChild
yeniden başlatma sırasında bu yönergenin değerine kadar değiştirilebilir.
Bu direktif kullanılırken özel dikkat gösterilmelidir. Şundan ThreadLimit
çok daha yüksek bir değere ayarlanırsa ThreadsPerChild
, fazladan kullanılmayan paylaşımlı bellek tahsis edilecektir. Her ikisi de ThreadLimit
ve ThreadsPerChild
sistemin kaldırabileceğinden daha yüksek değerlere ayarlanırsa, Apache httpd başlamayabilir veya sistem kararsız hale gelebilir.
Bu yönergenin değerini ThreadsPerChild
, Apache httpd’nin şu anki çalışması için öngördüğünüz en büyük ayardan daha yükseğe ayarlamayın.
THREADSPERCHİLD
Bu yönerge, her çocuk süreç tarafından yaratılan evre sayısını belirler. Çalışan her iş parçacığı tek bir isteği işleyebilir. Çocuk bu iş parçacıklarını başlangıçta oluşturur. MPM kullanıyorsanız mpm_winnt yalnızca bir alt süreç vardır, bu sayı sunucunun tüm yükünü kaldırabilecek yeteri kadar yüksek olmalıdır.
Çalışan gibi birden çok alt işlemin olduğu bir MPM kullanıyorsanız, toplam iş parçacığı sayısı sunucudaki ortak yükü kaldıracak kadar yüksek olmalıdır. Bu yönergede de bir üst sınır vardır ve bu sınır, ThreadLimit
varsayılan olarak 64 iş parçacığı olan yönerge tarafından kontrol edilir.
ThreadsPerChild
64 iş parçacığını aşmak için ayarlamaların da yapılması gerekiyor ThreadLimit
.
Bu değeri artırmak, her bir çocuğun bellek tüketimini düşük tutarken daha büyük bir MaxRequestWorkers
yönergeye izin vererek daha fazla isteği işlemesine olanak tanır. Her çocukta daha fazla iş parçacığı çalıştırmanın önemli bir avantajı, paylaşılan bellek önbelleği erişimidir. Bir çocuktan gelen ileti dizileri, başka bir çocuğun önbelleklerine erişemez. Çocuk başına iş parçacığı sayısını artırmak, önbellek verilerinin bu paylaşımı nedeniyle daha fazla performans sağlar.
İçin varsayılan değer ThreadsPerChild
olan 64 ile kullanıldığında mpm_winnt ve 25 ile kullanıldığında prefork, Olay veya İşçi MPM. Bu, çoğu durumda iyi çalışır ve çocuklar ile ipler arasında adil bir denge sağlar.
TEMEL APACHE DİREKTİFLERİ
Apache’nin temel yönergeleri aşağıdaki dosyalarda düzenlenebilir:
Bir Açık DirectAdmin tabanlı bir sunucuda bunun içinde yer alacak: /etc/httpd/conf/extra/httpd-default.conf
bir günü cPanel sunucuda, bu yer alacak /etc/apache2/conf.d/httpd.conf
bir günü Plesk sunucusunda, bu olacak/etc/httpd/conf/
Nano, vi veya vim kullanıyorsanız: dosyayı açtıktan sonra, dosyada gezinerek yönergeleri bulabilirsiniz. VI veya VIM kullanarak, eğik çizgi ‘/’ yazıp tam olarak aradığınız dizeyi yazarak da arama yapabilirsiniz (arama büyük / küçük harfe özeldir).
MAXKEEPALİVEREQUESTS
Bu ayar, açıkken kalıcı bağlantı başına izin verilen istek sayısını sınırlar KeepAlive
. 0 olarak ayarlanırsa, sınırsız isteklere izin verilecektir. Varsayılan değerdir 100
.
Genel olarak, bu değerin en az sunucudaki en yoğun trafiğe sahip sayfaların sunduğu en büyük öğe sayısı (HTML, Metin, CSS, Resimler, vb.) Kadar yüksek olmasını istersiniz.
VPS hesapları gibi sanallaştırılmış hesaplar için bu değerin 100’ün üzerine çıkarılmaması önerilir. Bol miktarda RAM içeren özel sunucularda bu değerin artırılması mümkündür.
HOSTNAMELOOKUPS’I DEVRE DIŞI BIRAKIN
Her zaman ek CPU zamanına mal olan DNS aramaları yapmaktan kaçının. Nadiren ihtiyacınız olacak HostnameLookups
ve ihtiyacınız olduğunda, gerçeğin ardından onlara bakabilirsiniz. Eğer varsa HostnameLookups
kapalı bu kararlılığı için yapılandırmaları konak isimlerine ait DNS için beklemek zorunda engelleyen gibi yapılandırmasında ana makineyi kullanmaktan kaçının. Bunun yerine IP adreslerini kullanmalısınız.
MOD_GZİP / MOD_DEFLATE KULLANIN
İçeriğinizi göndermeden önce gzip ile sıkıştırın, ardından müşteri aldıktan sonra sıkıştırmayı açacaktır. Bu, dosya aktarımlarının boyutunu en aza indirecek ve genellikle kullanıcı deneyimini iyileştirecektir.
DİRECTORYINDEX JOKER KARAKTERLERİNDEN KAÇININ
DirectoryIndex
İndeksi değil, belirli bir yani index.html veya index.php seçin.
MOD_DİSK_CACHE DEĞİL MOD_MEM_CACHE KULLANIN
mod_mem_cache
önbelleğini farklı apache süreçleri arasında paylaşmayacaktır. Bu, düşük performans kazancı ile yüksek bellek kullanımına neden olur, çünkü mod_mem_cache
aynı apache sürecinde aynı sayfayı nadiren iki kez sunar.
Bunun yerine, mod_disk_cache
düz bir hiyerarşi ile kullanın. Değerleri ayarlayın CacheDirLength=2
ve CacheDirLevels=1
önbellek dizininizi temizlerken htcacheclean’ın sonsuza kadar sürmemesini sağlamak için.
Önbelleğinizi kullanmak için, uygun Expires , Etag ve Cache-Control Header’ları kurduğunuzdan da emin olmalısınız, yani bir dosyanın ne zaman sona erdiğini söylemelisiniz, aksi takdirde herhangi bir önbelleğe alma avantajı yaşamayacaksınız.
ÖNBELLEĞİ HARİCİ SÜRÜCÜYE TAŞIYIN
Diğer işlemleri yavaşlatmadan en hızlı erişim için önbelleğinizi ayrı bir fiziksel diske yerleştirin. Katı Hal Sürücü, en hızlı erişim sürelerini sağlar.
APACHE’Yİ TEST ETME VE YENİDEN BAŞLATMA
Apache’yi yeniden başlatmadan önce bir yapılandırma testi gerçekleştirmek için dosyayı kaydettiğinizden emin olun. Bu test, yapılandırma dosyalarını ayrıştırır ve ya a’yı bildirir Syntax Ok
ya da belirli sözdizimi hatası hakkında bilgi sunar.
To test etmek için Apache yapılandırma girin:
[root @ vps httpd] # hizmet httpd yapılandırma testi Sözdizimi Tamam
Veya:
[root @ vps httpd] # apachectl -t Sözdizimi Tamam
Apache’yi yeniden başlatmak için şunu girin:
[root @ vps httpd] # hizmet httpd yeniden başlatma Httpd durduruluyor: [Tamam] Httpd başlatılıyor: [Tamam]
Yalnızca cPanel: Apache yapılandırmanızı düzenlemek için doğru prosedür hakkında daha fazla bilgi burada bulunabilir.
APACHE2BUDDY
Apache2Buddy , MySQLTuner’a benzer bir betiktir, Apache kurulumunuzu gözden geçirir ve Apache işlem belleğinize ve genel RAM’e göre önerilerde bulunur. Apache2buddy.pl betiği aşağıdakileri kontrol edecektir:
- PHP bellek sınırları
- Memcache
- MaxClients
- Hafıza kullanımı
- Maksimum potansiyel bellek kullanımı
- Apache’ye ayrılan toplam RAM yüzdesi
- MaxRequestWorkers
Komut dosyasını aşağıdaki komutla çalıştırabilirsiniz:
curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | sudo perl
APACHEBENCH
Apache Bench (ab), Apache web sunucusu kurulumları için tasarlanmış bir yük testi ve kıyaslama aracıdır (nginx gibi herhangi bir HTTP sunucusunda sorunsuz çalışmasına rağmen).
Yüklemek ab
için aşağıdaki komutları çalıştırın:
CentOS / Fedora
yum httpd araçlarını yükle
Debian / Ubuntu
apt-get update apt-get install -y apache2-utils
SÖZDİZİMİ
Sunucunuzu karşılaştırmak için, yourdomain
etki alanı adınızla değiştirerek aşağıdaki komutu girin.
ab -t 60 -n 20 -kc 5 http://etkialaniniz.com/
ApacheBench’i çalıştırmak, kendi sunucunuza yönelik bir hizmet reddi saldırısı yönlendirmeye benzer. Bu özel araç, altyapınıza sempati duyacak şekilde tasarlanmamıştır ve bir test dönemi boyunca ölçülen aralıklarda eşzamanlılığı artırma yeteneği sağlamaz.
Bir yük testi çalıştırırken tek seçenek ab
, web sunucunuzu tek seferde rastgele sayıda eşzamanlı istekle doldurmaktır.
-n [value]
: Gönderilecek istek sayısı-t [value]
: Her bağlantının canlı olduğu saniye cinsinden süre-c [value]
: Gerçekleştirilecek eşzamanlı isteklerin sayısı-l
: uzunluk kontrolünü göz ardı et-v 2
: başarı veya başarısızlığı tanımlayabilmeniz için her yanıtın gövdesini ve başlığını standart çıktıya aktarır.-k
: HTTP Canlı Tutun
Hem bayrakları hem -t
de -n
bayrakları kullanıyorsanız her -t
zaman önce gitmeniz gerektiğini unutmayın.
Apache Sunucu Optimizasyonu Nedir?
Apache sunucu optimizasyonu nedir? nasıl yapılır? konusunu sizler için derledik umarım sizlere faydalı olmuştur. Bir başka makalemiz olan Fidye virüsü nedir? konusuna da göz atabilirsiniz.