it-swarm.asia

ServerLimit, MaxClients, MaxRequestsPerChild yönergeleri için en uygun değerler

Trafik yoğun bir site, çoğunlukla kullanıcı tarafından oluşturulan dinamik içerik bol çalıştırıyorum.

Sunucu özel bir sunucudur ve toplam 4 Intel (R) Xeon (R) CPU X3210 @ 2.13GHz işlemciye sahiptir. Sunucunun 4GB RAM ve MySQL veritabanı ayrı bir sunucuda çalışır.

Aşağıda mevcut yönergelerim var, ancak 5 binden fazla kullanıcıyla yoğun saatlerde önemli bir gecikme fark edildi - ve bu tamamen MySQL'in hatası değil, çünkü sayfalar hızlı bir şekilde oluşturuluyor gibi görünüyor (bir sayfa oluşturma süresi sayacı uyguladım), ancak uzun bir süre var sayfa yanıtlanana ve tarayıcıya gönderilinceye kadar bağlantı gecikmesi.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

En üstteki komutu kullanarak sunucuyu izlemenin, CPU kullanımının en yoğun saatlerde asla% 20 ~% 30'un ötesine geçmediğini belirtmeliyim. MySQL sunucusu aynı zamanda% 30 ~ 50 oranında kullanıma sahiptir ve sürekli yavaş sorguları düzeltmek için çalışıyorum, ancak bu farklı bir konudur. Statik sayfaların yoğun saatlerde yüklenmesi uzun sürdüğü için bir DB darboğaz olmadığını biliyorum.

Bu değerleri optimize etmek için herhangi bir ipucu çok takdir edilecektir, teşekkürler.

29
andreszs

MaxClients'ınız WAY WAY WAY çok yüksek. Apache işleminizin şu anki boyutu nedir? Bunu x 900 ile çarpın. Bu 4GB'tan büyük mü? Eğer öyleyse, makine büyük olasılıkla değişime uğramaktadır. Genellikle kutuda MaxClients = 2x vCPU ile başlarım (grep -c işlemci/proc/cpuinfo). Bu durumda yaklaşık 8 olur. Sonra MaxClients x Apache işlem boyutunun 4GB'ın üzerinde olmadığından emin olun.

Müşterilerinizin sahip olduğu bağlantı türüne bağlı olarak MaxClients'ınızı oradan yükseltebilirsiniz. (Çevirmeli ağ kullanıcılarının kaşıkla beslenmesi gerekir.) Ancak kendinizi asla takas durumuna sokmadığınızdan emin olun.

Ardından Min, Maks ve Start sunucularınızı MaxClients olarak ayarlayın. Özel bir sunucu ortamında farklı olmalarına gerek yoktur.

Sonra ab ile bazı testler yapın (kaz notları olarak).

24
toppledwagon

Apache işleminizin ortalama boyutunu elde etmeniz gerekir. Bu sayı ve RAM toplam boyutu ile MaxClients yönergesini hesaplayabilirsiniz. Bunu unutmayın: "Bir web sunucusu asla takas etmek zorunda olmamalı" ( Apache Performance Tuning )

Üst veya htop ile izleme tamam, ancak gangliyon veya munin gibi bazı izleme araçlarıyla sunucularınızın tüm istatistiklerini (cpu, ram, disk i/o, Apache istekleri, mysql yavaş sorguları vb.) Daha iyi görmeniz gerekir. olası darboğazları bulmak.

5
hdanniel

Apache'nin benchmark (ab) aracıyla oynamanızı tavsiye ederim. Bunları trafik akışınızla eşleştirmek için değerlerle oynayabilir ve ortalama yükleme süresine ve benzerlerine kadar ne tür yanıtlar aldığınızı görebilirsiniz. Bu noktada, bunları en iyi duruma getirmek için konuştuğunuz ayarlarla oynayabilirsiniz. Her performans Tweak için en iyi performansı elde etmek için ab ile baş edebilmelisiniz.

Ayarlarınız hakkında konuşmak benim için ihtiyatlı olmaz, ancak RAM hesabınızı da dikkate almanız gerekir, çünkü çok fazla _ yiyormuşsunuz gibi geliyor [RAM bu ayarlarla. Rağmen bu sadece herhangi bir veri olmadan spekülasyon. htop size kaynaklarınızın görsel olarak iyi bir şekilde okunmasını sağlar.

Ayrıca yük ortalamanız çok şey söyleyebilir. Kullanımınızın% 20-30 cpu'dan toplam çekirdek miktarınızdan çok daha yüksek olduğundan şüphe ediyorum, ancak sunucunuzun gerçekten ne kadar zor çalıştığının başka bir göstergesi.

4
goose