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


29

Trafik yoğun bir site işletiyorum, çoğunlukla kullanıcı tarafından oluşturulan çok sayıda dinamik içerik.

Sunucu özel bir sunucudur ve toplam 4 adet Intel (R) Xeon (R) CPU X3210 @ 2.13GHz işlemciye sahiptir. Sunucunun 4GB RAM'e sahip olduğunu ve MySQL veritabanının ayrı bir sunucuda çalıştığını göz önünde bulundurarak, ServerLimit ve MaxClients apache'nin direktifleri için en uygun değerleri bilmem gerekiyor. Panel, CentOS'lu DirectAdmin'dir.

Aşağıda mevcut yönergelerim var, ancak 5 binin üzerinde kullanıcısı olan yoğun saatlerde, önemli bir gecikme göze çarpıyor - ve bu tamamen MySQL'in hatası değil, çünkü sayfaların hızlı bir şekilde oluşturulduğu görülüyor (sayfa oluşturma zaman sayacı uyguladım), ancak çok uzun bir süre var. Sayfa yanıtlamaya başlayana ve tarayıcıya gönderilene 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

Sunucuyu en iyi komutu kullanarak izlemekten bahsetmeliyim ki, CPU kullanımı en yoğun saatlerde hiçbir zaman% 20 ~% 30'un üstüne çıkmaz. MySQL sunucusunun o zaman% 30-50 kullanımı var ve yavaş sorguları düzeltmek için sürekli çalışıyorum, ancak bu farklı bir konu. Bunun bir DB darboğazı olmadığını biliyorum çünkü statik sayfaların yoğun saatlerde yüklenmesi de uzun sürüyor.

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

Yanıtlar:


24

MaxClients'ınız YOL YOLU YOLU çok yüksek. Apache işleminizin şu andaki boyutu nedir? Bu x 900 ile çarpın. 4GB'tan büyük mü? Eğer öyleyse, makine büyük olasılıkla takas gidiyor. Genellikle kutudaki MaxClients = 2x vCPU'larla başlarım (grep -c işlemci / proc / cpuinfo). Bu durumda hangisi 8 olur. O zaman 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'inizi oradan yükseltebilirsiniz. (Çevirmeli bağlantı kullanan kullanıcıların kaşıkla beslenmeleri gerekir, vb.) Ancak, hiçbir zaman kendinizi değiş tokuş eden bir duruma sokmadığınızdan emin olun.

Sonra Min, Max ve Start sunucularınızı MaxClients'a ayarlayın. Özel bir sunucu ortamında farklı olmalarına gerek yoktur.

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


Bazı nedenlerden dolayı işlem boyutunu yanlış belirledim ... şimdi en üst komutta RESIDENT SIZE apache işlemlerinin 10 ile 15 MB arasında olduğunu gördüm. Bir yerde, paylaşılan kütüphanelerin bu sayıya dahil edilmesinden dolayı "gerçek" boyutun bu boyutun yarısı olduğunu okudum. Bunu göz önüne alarak her biri 7 MB büyüklüğünde 570 işlem yapabileceğimi hesaplamalıyım, bunun doğru olduğunu düşünüyor musunuz?
andreszs,

Hesaplamalar için 15 MB kullanmanızı ve sonra ölçümleri kontrol etmeye başlamanızı öneririm: # http işlem vs. bellek kullanımı. Bu size MaxClients sayısı hakkında daha iyi bir fikir verecektir
hdanniel

1
400'e düşürdüm ve en yoğun saatten önce bile sonuç istenenden zıt etkiye sahipti: Orijinalin altındaki herhangi bir değer zaman aşımına uğrar ve uzun gecikmeler yaratır. Aslında bunu 1500 istemciye yükselttim ve bellek kullanımı şu an 3 GB'ken, ortalama CPU kullanımı% 8'dir. Tabii ki şimdi SQL server üzerinde daha fazla yük var ve bu konuda çalışmak zorunda kalacağım.
andreszs,

İşte şimdi benim htop komutum, 1500 apache işlemi ve neredeyse 100 sistem işlemleri. Bu RAM kullanımının% 75'i ile. a.imagehost.org/0011/htop.png Formülünüzü gözden geçirmeli misiniz? ;)
andreszs,

1
Bu nedenle kendi ortamınızda testler yapmanız gerekiyor. Apache'lerimizin önünde http hızlandırıcıları var, bu sayede kaşıyıcı mobil kullanıcılar değil. Başvurunuz da çok hafif görünüyor. Yükü DB'nize taşıdıysanız, bu apache işlemlerinin çoğunun aslında otururken ve bir mysql bağlantısı için beklerken verilere hizmet verdiğini söyler. Bu da beni DB'inize kaç bağlantıya izin verdiğinizi sormamda bana yol açar. Bu numara MaxClients'inizi aşıyor mu? 5.000 eşzamanlı bağlantınız var mı? Eğer öyleyse, önünde perlbal gibi bir şeye bakmak isteyebilirsiniz.
devrilmiş yük arabası

5

Apache işleminizin ortalama boyutunu almanız gerekir. Bu sayı ve RAM'inizin toplam boyutu ile MaxClients yönergesini hesaplayabilirsiniz. Bunu hatırlayın: "Bir web sunucusu asla değişmemelidir" ( Apache Performance Tuning )

Top veya htop ile izleme işlemi tamamdır, ancak ganglia veya munin gibi bazı izleme araçlarıyla sunucularınızın (cpu, ram, disk i / o, apache istekleri, mysql yavaş sorguları, vb.) İstatistiklerinin daha iyi görülmesi gerekir. olası tıkanıklıkları bulmak.


Şimdilik sadece en iyi ve en çok kullanılan komutlara sahibim ve yine de tüm bilgilerini anlayamıyorum. Bu, dün en yoğun saatteki aktivite, değiş tokuş yok gibi görünüyor; lütfen yanlış olduğumu söyle: Görevler: toplam 1043, 2 koşu, 1041 uyku, 0 durdu, 0 zombi Cpu (lar):% 13,8 us,% 1,8 sy,% 0,0 ni,% 82,1 id,% 0,8 wa, 0.0% hi,% 1.5 si,% 0,0 st Mem: 3961276k kullanılan 4138360k toplam, 177084k ücretsiz, 75016k tamponlar değiştirme: 2031608k toplam 1484K kullanılan 2030124k ücretsiz, 1836600k önbelleğe
andreszs

Evet, sunucunuz değişmiyor. Gerçek hayat ölçütlerini tercih ederim, ancak isterseniz sunucunuzun ne kadar işleyebileceğini kontrol etmek için ab veya httperf gibi bir vurgulama aracı kullanabilirsiniz. Testler için MaxClients'a özen gösterin ve düşük bir rakamla başlayın (15MB varsayımına göre).
hdanniel

4

Apache'nin benchmark (ab) aracı ile oynamayı tavsiye ederim. Bunları trafik akışınızla eşleştirmek için değerlerle oynayabilir ve ortalama yükleme süresi ve benzerine kadar ne tür yanıtlar aldığınızı görebilirsiniz. Bu noktada, onları denemek ve optimize etmek için bahsettiğiniz ayarlarla uğraşabilirsiniz. Her performans ayarlaması için en uygun performansı ele alabilmek için ab ile çalışabilmelisiniz.

Ayarlarınız hakkında konuşmak benim için pek mantıklı olmazdı, ancak RAM'ınızı da hesaba katmanız gerekir çünkü bu ayarlarla çok fazla RAM yiyormuşsunuz gibi geliyor. Her ne kadar bu sadece herhangi bir veri olmadan spekülasyon. htop, kaynaklarınızı iyi bir şekilde görmenizi sağlar.

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


Sorun şu ki, sunucu yönetiminde yeterince tecrübeli değilim, bu yüzden yerleşimlerle oynamaya başladım ve sonuçları izlemeye başladım. Ayrıca, değerleri değiştirmek HTTDP'nin yeniden başlatılmasını gerektiriyor, bu da kullanıcılarım için rahatsızlıklara neden oluyor, bu yüzden bundan kaçınmayı tercih ediyorum. Başka bir kullanıcıya mesaj gönderdiğinizi ve "Gönder" i tıkladıktan sonra bir Sunucu bağlantı sorunu yaşadığınızı hayal edin. CPU kullanımında önceki yorumumdaki bilgilere bakın: en yoğun saatlerde% 15'in üzerine çıkmaz. Sanırım dün 6000 çevrimiçi kullanıcım olduğunu düşünüyoruz.
andreszs,

Bunu kesinlikle bir üretim ortamında yapmanı istemem. Test etmek için başka bir sunucu (aynı donanıma sahip değilse çok benzer) kullanıyorsanız bunu en düşük trafik saatinde yapmanızı öneririm. ab'nin kullanımı oldukça kolaydır, ancak kesinlikle toppledwagon'un MaxClients'inizi hesaplarken iyi bir talimat verdiğini düşünüyorum. Takas alanını kullanmayı bıraktıktan sonra kesin bir iyileşme göreceksiniz. AB için httpd.apache.org/docs/2.0/programs/ab.html ve cyberciti.biz/tips/… kontrol edin
kaz
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.