Apache'nin bellek kullanımını ayarlamak için ana parametre olacaktır MaxClients
. Çok düşük bir değer ve müşteri isteklerini sunmak için kullanılabilir alanlarınız bitecek. Çok fazla ve tüm RAM'inizi kullanacak ve performansı öldürecek takas alanı kullanmaya başlayacaksınız (bir sunucu çökmesi gibi görünebilir).
Ayarlamanın bir yolu MaxClients
, sistemin bellek kullanımını gözlemlemek ve ayarı gerektiği gibi yukarı / aşağı ayarlamaktır. Sunucu takas etmeye başlarsa düzenleyin. Sunucuda boş bellek varsa, takın.
Apache'nin bellek kullanımına bakarak maksimum değeri de tahmin edebilirsiniz. İşlemleri belleğe göre sıralamak için Başlat top
ve tuşuna basın M
. Şuna benzer bir şey görmelisiniz:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Apache örneği başına yaklaşık bellek kullanımı elde etmek için RES ve SHR sütunlarını çıkarın. Bu durumda yaklaşık 16 MB civarındadır. 4GB RAM'im varsa ve bunun 3GB'ının Apache için kullanılmasını istiyorsanız, MaxClients ayarım şurada olacaktır:
MaxClients = 3000/16 = 188
Bu durumda, 150-200 değeriyle başlayabilirim, ancak bellek kullanımını izlerdim ve takas kullanmaya yaklaşmaya başlarsa MaxClients'ı% 10-20 azaltacağım. Ayrıca 3GB değerinin sadece rastgele bir örnek olduğunu unutmayın. Yalnızca Apache çalıştıran sunucularda 4GB'nin neredeyse tamamını kullanabilirim. Diğer durumlarda, Apache için yalnızca 1 veya 2GB, diğer uygulamalar, sistem veya önbellek için kalanları kaydetmek isteyebilirim.
Düzenleme: Ek Soruları Yanıtlama
Sunucunuzu aniden iki kat daha hızlı yapacak sihirli MaxClients değerleri veya diğer Apache yapılandırma parametreleri yoktur. MaxClients 10 veya 1000 olsun, bazı sunucular iyi çalışıyor gibi görünecektir. MaxClients ayarının "kötü" olduğu iki ana durum vardır:
- Çok Düşük : MaxClients çok düşük olduğunda, tüm Apache istemcilerinin kullanıldığı ve yeni bağlantıların bir sonraki istemcinin kullanılabilir olmasını bekleyen bir kuyruğa girdiği bir duruma ulaşırsınız. Apache'nin mod_status'unu etkinleştirirseniz, herhangi bir zamanda kaç müşterinin meşgul olduğunu gerçek zamanlı olarak görebilirsiniz. Yüksek trafik zamanlarında site yavaşlayacağından ve tüm istemcilerin kullanımda olduğu gözlemlendiğinden, bu durumun teşhis edilmesi nispeten kolaydır.
- Çok Yüksek : MaxClients çok yüksek olduğunda, tüm RAM'i tüketme durumuna girecek ve takas kullanmaya başlayacaksınız. Bu durumda, sitenizin performansı esasen sıfıra düşer (RAM ve disk arasındaki hız farkını göz önünde bulundurun). Bu durumun gözlemlenmesi ve teşhis edilmesi çok daha zor olabilir, çünkü sunucu trafikte bir artış meydana gelene kadar yüksek bir MaxClients ile iyi çalışır. Örneğin, saatte birkaç isabet alan bir sitede MaxClients'ı 1000 olarak ayarlayabilirim, RAM tarafından desteklenenden çok daha fazlası, ancak Apache'nin bir kerede yalnızca bir veya iki istemci kullanması gerektiğinden hiç bir sorun görmedim. Sorunu sadece trafikte bir artış elde ettiğimde, eşzamanlı olarak kullanılan istemci sayısını artırdığımda, RAM tükenene ve takas alanı gerekene kadar tespit edeceğim.
Sunucunuzun, uygulamanızın veya trafiğinizin ayrıntılarını bilmesem de, aşağıdaki yapılandırma değerlerini başlangıç noktası olarak önerebilirim. Bunları deneyin, sunucunun yükünü ve kullanımını izleyin ve ayarları gerektiği gibi değiştirin.
- mod_status : Apache'nin kullanımını görebilmek için bunu etkinleştirin. Daha gelişmiş istatistikler için, sunucu kullanımını ve trafik modellerini takip edebilmeniz için Zabbix / Nagios gibi bir izleme uygulaması yükleyin.
- MaxClients : 100-200 değerine ayarlayın. Emin değilseniz daha düşük bir değerle başlar ve bellek / CPU / Apache kullanımını izlerim. Bu, ayarlanacak ana parametre olacaktır.
- MaxRequestsPerChild : Bu, bir Apache istemcisinin / alt öğesinin ne zaman yeniden başlatılacağını belirtir. Yanlış bir değer yoktur (çok küçük değerler verimsiz olsa da) ve sunduğunuz içeriğe bağlı olacaktır. Dinamik içerik için sıfır olmayan büyük bir değer (1000 gibi) httpd işlemlerinizin sonunda çok büyük olmasını önler.
- Diğer Parametreler : Kalan parametrelerin kapsamlı bir karşılaştırmasını yapmamış olsam da, onları çok düşük veya çok yüksek değerlere ayarlamadığınız sürece nispeten küçük bir etkiye sahip olmalıdırlar. Varsayılanların kullanılması, sitelerin çoğu için uygun olmalıdır. Her modülde kullanılan ve parametrelerin tam bir açıklaması için Apache Prefork veya Worker modülü belgelerine bakın (kullanmadığınız bir parametreyi ayarlamaya çalışmanın bir anlamı yoktur).
- Kıyaslama : Parametreleri ayarlarken, sunucunuzun yetenekleri hakkında nicel bir sayı elde etmek için ab (ApacheBench) veya siege gibi bir kıyaslama aracı kullanmanızı öneririm. Hissetmek ya da daha kötüsüne dayanmak, çöküp çökmediğini görmek, bir web sunucusunun parametrelerini ayarlamak için iyi bir yöntem değildir.