Apache2'nin Önceden Ayarlanması MaxClients ServerLimit


22

Web sunucusu olarak Apache2'yi kullanan 128 GB Ram'a sahip bir makinem var (bu makinede Veritabanı Sunucusu yok, Veritabanı Makinesi 2000 maksimum bağlantıyı kaldırabilen 64 GB Ram makinesidir). Şu anda 44 meşgul işçi ve 12 boşta çalışanın olduğu bir izleme aracıyla, ön çalışma modülüm için en iyi teorik değerlerin neler olduğunu görüyorum.

bazen web sitelerini yükleyen saatlerde yükleyen boş sayfalar alıyorum ve bu hatayı apache hata günlüğümde gördüm:

[ihbar] çocuk idaresi 13595 çıkış sinyali Segmentasyon hatası (11)

bu sorunu da nasıl çözebilir?

Apache2 Prefork Modül konfigürasyonum:

StartServers          3
MinSpareServers       3
MaxSpareServers       5
ServerLimit           3200
MaxClients            3100
MaxRequestsPerChild   0

Www makinesinde ücretsiz -h :

toplam: 128 G ücretsiz: 97GB (apache2 çalışıyor) paylaşılan 0b tampon belleği 1.9G önbellek 23G

Apache2 ve diğer Programlar tarafından kullanılan Ram:

Private  +   Shared  =  RAM used    Program

 96.0 KiB +  61.0 KiB = 157.0 KiB   sh
176.0 KiB +  26.0 KiB = 202.0 KiB   atd
176.0 KiB +  35.5 KiB = 211.5 KiB   acpid
208.0 KiB +  19.5 KiB = 227.5 KiB   mdadm
204.0 KiB +  30.0 KiB = 234.0 KiB   init
248.0 KiB +  62.0 KiB = 310.0 KiB   sendmail
376.0 KiB +  36.0 KiB = 412.0 KiB   dbus-daemon
388.0 KiB + 285.5 KiB = 673.5 KiB   cron (2)
820.0 KiB +  42.0 KiB = 862.0 KiB   gam_server
920.0 KiB + 108.0 KiB =   1.0 MiB   ntpd
968.0 KiB + 243.0 KiB =   1.2 MiB   getty (6)
  1.3 MiB + 351.5 KiB =   1.6 MiB   udevd (3)
  1.5 MiB + 343.0 KiB =   1.8 MiB   sendmail-msp
  2.0 MiB + 910.0 KiB =   2.9 MiB   plugin-localresources2
  3.4 MiB +  50.0 KiB =   3.4 MiB   rsyslogd
  3.6 MiB +  68.5 KiB =   3.7 MiB   bash
  1.9 MiB +   2.1 MiB =   4.0 MiB   sendmail-mta (4)
  3.8 MiB + 556.0 KiB =   4.3 MiB   sshd (2)
  3.7 MiB +   1.2 MiB =   4.8 MiB   plugin-apache2
  5.1 MiB +   1.2 MiB =   6.3 MiB   agent-service
  7.0 MiB + 654.0 KiB =   7.6 MiB   fail2ban-server
  9.6 MiB +   2.6 MiB =  12.2 MiB   proftpd (8)
 59.2 MiB +  70.0 KiB =  59.3 MiB   miniserv.pl
 96.8 MiB +   3.6 MiB = 100.4 MiB   php5-cgi (2)
196.4 MiB +  35.9 MiB = 232.3 MiB   apache2 (40)
---------------------------------
                     tot 450.0 MiB

2
Web sunucusunda çalışan uygulama kodu nedir? Bu büyük olasılıkla suçlu.
Shane Madden

lütfen birkaç apache2ctl durumu örneği gönderin; error_log'da belki bir şey var mı?
Hrvoje Špoljar

Yanıtlar:


63

Apache ön ayar ayarları, apache performans ayarlama kuralları

alıntı:

The single biggest hardware issue affecting webserver performance is RAM.
A webserver should never ever have to swap, as swapping increases the latency
of each request beyond a point that users consider "fast enough". 
This causes users to hit stop and reload, further increasing the load.
You can, and should, control the MaxClients setting so that your server does
not spawn so many children it starts swapping. This procedure for doing this
is simple: determine the size of your average Apache process, by looking at
your process list via a tool such as top, and divide this into your total 
available memory, leaving some room for other processes.

girişinize göre bu şekilde ayarlamalısınız:

  • Toplam Bellek: 128 GB
  • Apache hariç her şey için% -10 bellek: 115 GB
  • Şimdi ne kadar tek apache işleminin kullanıldığını bulmamız gerekiyor.

Bunu hesaplamak için aşağıdaki betiği kullanabilirsiniz:

pgrep apache2 | xargs -n1 -I{} cat /proc/{}/smaps | \
  awk '{if ($0 ~ /stack/) {pids+=1} else if ($0 ~/^Shared_/) 
    {shared+=$2} else if ($0 ~ /^Pss:/) {priv+=$2}} END {
      printf "%.2f MB\n",(priv+shared/(pids*pids))/1024}'

Bu, etkin apache işlemlerinin sayısı başına paylaşılan kullanımı orantılı olarak bölmeye çalışırken ve Pss'in üstüne ekleyerek (orantılı küme boyutu) bir tek apache işleminin belleği kullandığı en iyi tahmindir.

Sonunda bu rakamla 115 GB böldün ve anladın MaxClients/ServerLimit. Buradan, diğer rakamları göreceli olarak hesaplayabilirsiniz.

  • StartServers MaxClients'ın% 30'u
  • MinSpareServers MaxClients'ın% 5'i
  • MaxSpareServers MaxClients'ın% 10'u
  • ServerLimit == MaxClients
  • MaxConnectionsPerChild 10000 (bellek sızdıran uygulamalar ile olası sorunu gidermek için muhafazakar bir alternatif olarak)

2
Umarım benden daha fazla rep puanına sahip biri bu cevaba oy verir, çok teşekkür ederim!
Kullanıcı-N

2
Hesaplama komut dosyası bana 842.13 MB verir. Bu, benim yaptığımın üstünde bir büyüklük sırası ile ilgili (CentOS 6.7'de apache 2.2).
Quinn Comendant

1
Prefork modunda. İşte çıktı /server-info: i.imgur.com/SS2gIXI.png
Quinn Comendant

1
@QuinnComendant kötü hüner, ancak eğer prefork modülü mevcutsa IfModule doğruysa (ki) ve aslında her iki seçenek de kullanılabilir işçi ve MPM ... Sistemimde çalışan için aynı sunucu ve bellek kullanımım var ~ 850 MB. Prefork'un 1 işlem için 800 MB'lık belleği kullanması mümkün değildir. Apache2 işlem ismini httpd'ye yönlendirdiği komut dosyasındaki satırı değiştirdiniz mi?
Hrvoje Špoljar

1
@shawn neden böyle söyledin? hesaplanması gerektiğine nasıl inanıyorsun?
Hrvoje Špoljar
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.