Apache bellek kullanım optimizasyonu


11

Apache sunucu belleğimi çok fazla kullanıyor ve çökmesine neden oluyor. Sunucuda 4GB RAM var.

Performansını artırmak için Apache ayarlarında ince ayar yapmaya çalışıyorum, ancak bu konuda oldukça yeniyim.

Bu makalenin tavsiyelerini takip etmeye çalışıyordum ama bir şeyleri nasıl hesaplayacağımdan emin değilim ve daha da kötüleştiriyorum.

Üstüm şöyle:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

Yani, olurdu

MaxClients = 3000/ (322-37) = 10

Bu doğru mu? Ayrıca, MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild gibi diğer parametrelerin değerleri ne olmalıdır?

Lütfen biri bana yardım eder mi?

Güncelleme

Sizin önerdiklerinizi denedim. Çalışıyor, ama sadece bir süre. Sunucu başladıktan bir süre sonra bellek kullanımı artmaya devam eder ve asla düşmez.

Yani, sunucuyu başlattıktan sonra, çevrimiçi olarak 500 kullanıcı olduğunu varsayalım. Sunucu X RAM tüketecek. Bundan 2 saat sonra, aynı 500 kullanıcıyla çevrimiçi olarak sunucu 10X RAM tüketecek.

Bundan kaçınmanın bir yolu var mı yoksa sunucuyu izlemeye ve zaman zaman yeniden başlatmaya devam etmem gerekecek mi?


1
sorunuza güncelleme eklerken, lütfen yanıt göndermek yerine orijinali düzenleyin. Bu, aynı zamanda soruyu tekrar ön sayfanın üst kısmına daraltmanın ek bonusuna sahiptir.
Ben Pilbrow

Yanıtlar:


14

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 topve 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.

MaxClients, Apache 2.4'ten başlayarak MaxRequestWorkers olarak yeniden adlandırıldı.
jastram
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.