Apache'deki MaxClients. Prosesimin boyutunu nasıl bilebilirim?


9

Gönderen http://httpd.apache.org/docs/2.2/misc/perf-tuning.html

Web sunucusu performansını etkileyen en büyük donanım sorunu RAM'dir. Bir web sunucusunun asla takas etmesi gerekmez, çünkü takas her isteğin gecikmesini kullanıcıların "yeterince hızlı" olarak değerlendirdiği bir noktanın ötesine taşır. Bu, kullanıcıların durmasına ve yeniden yüklenmesine neden olarak yükü daha da artırır. MaxClients ayarını, sunucunuzun değiştirmeye başladığı kadar çok çocuk oluşturmayacak şekilde kontrol edebilir ve etmelisiniz. Bunu yapmak için bu prosedür basittir: Üst gibi bir araçla işlem listenize bakarak ortalama Apache işleminizin boyutunu belirleyin ve bunu diğer kullanılabilir işlemlere yer bırakarak toplam kullanılabilir belleğinize bölün.

Asıl mesele, boyutu nasıl bileceğimizi anlayamıyorum, çünkü 3888'den fazla httpd boyutuna sahip değilim

Ancak, MaxClients sayısını belirlememiz gerekiyorsa ve 4GB RAM'im varsa, bu yüzden şunu alıyorum: 972, bu yüzden MaxClients'da 900 gibi kullanmalıyım?


4
"3888 artık httpd büyüklüğüne sahip" - Bence "HUH?"
womble

Yanıtlar:


9

İlk olarak, Apache işlemlerinizden birinin PID'sini belirleyin.

Sonra böyle bir şey yapabilirsiniz:

cat /proc/PIDHERE/status | grep VmRSS

Bu, söz konusu işlemin aşağıdakine benzer (mevcut) yerleşik-set-boyutunu verecektir:

VmRSS: 304456 kB

Bu değer göründüğü gibidir, RAM'de yerleşik işlemin boyutudur.

Ardından ölçü biriminizi normalleştirin ( 4GB * 1024 * 1024 = 4,194,304 KB). Böl:

4194304 KB / 304456 KB = 13.77 processes

Muhtemelen sisteminizde çalışan ve bellek tüketen başka işlemleriniz olduğunu ve ideal olarak takas işlemini en aza indirmek istediğinizi düşünün, bu nedenle muhtemelen 13 Apache MaxClients'ın (sayılarımı kullanarak) yapılandırılmasını istemezsiniz, biraz daha az istersiniz (kendi takdirinize bağlı olarak) ).

Bu kaba bir tahmindir; Apache işlemlerinizin boyutu yüke bağlı olarak zamanla büyüyebilir.


1
RSS paylaşılan sayfaları içermese de, üzerine yazma kopyası olarak işaretlenen sayfaları içerir - yani bir makinede (toplam rss) / (fiziksel bellek) değerinden daha fazla işlem için yer vardır. Ayrıca başka bir yerde cevabımı görün - iyi performans için boş alan şart.
symcbean

4

MaxClients'ı test senaryolarından tahmin etmek bir başlangıç ​​noktasıdır - ancak sorunu doğru bir şekilde çözmek için uygulamanızın gerçek trafikle nasıl davrandığını ölçmeye başlamanız gerekir.

Apache'nizin ön çatal çalıştığını varsayarsak ....

Httpd işlemlerinin sayısını ve 'ücretsiz' çıktısını saymak için bir cron işi ayarlayın. Web sunucunuz yerel dosyalardan (ve pek çok durumda olmasa bile) herhangi bir içerik sunuyorsa, önbellek / arabellekler için kullanılabilir bellek miktarının performans üzerinde büyük bir etkisi olacağını unutmayın. eğer takas noktasına alırsanız, web performans muhtemelen korkunç!

Biraz veri aldıktan sonra, bir grafiğe çizin ve üzerinde en az kareler gerilemesi yapın - httpd bellek kullanımı için hedef sınırınıza ulaştığınız müşteri sayısını bulmak için tahmin edin. Bellek hedefi için bir başlangıç ​​noktası, fiziksel belleğin% 80'inden / içerik boyutunun% 80'inden daha azı olacaktır.

(MinSpareServers'ı çok yüksek bir değere ayarladıysanız, sonuçların doğru olmayabileceğini unutmayın)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

İdeal bir dünyada, aynı günlük dosyasındaki URL yanıt süresini de ölçersiniz - ancak bu çok daha karmaşık hale gelir.


Benim için, arabellekler / önbellek 11 istemciyi çalıştırırken veya sunucu 86 veya 151 istemciye ulaştığında (ve sunucu çöktüğünde) çok az değişir. MEM değişkeninizde ne görmeyi umuyorsunuz? İki sayı alıyorum, bu yüzden Ubuntu 12.04'ün beklediğinizden başka bir şey verip vermediğini merak ediyorum.
PeterB

'Ücretsiz' çalıştırmayı deneyin ve ne beklediğimi göreceksiniz (2 sayı). Bu sayılarda farklı sayıda işlem içeren çok az varyasyon olduğu doğruysa, o zaman olay tabanlı sunucuyu çalıştırıyorsunuz veya maxspareservers ayarınız saçmadır. Çıktının bir örneğini ve httpd.conf dosyanızın ilgili kısımlarını gönderirseniz, belki daha iyi bir resimimiz olur mu?
symcbean

.... ve "çökme"? Ne kazası?
symcbean

Üzgünüz, httpd.conf ayarları ve örnek çıktısı için pastebin.com/aHZCagVn adresine bakın . 'Kilitlenme' ile çok fazla istemciyi kastediyorum, sunucuda bellek kalmıyor ve kilitleniyor. Daha fazla bilgi için lütfen pastebin.com/fnXzBfQL adresine bakın .
PeterB

1
@PeterB, MySQLd'nin bu soruna neden olması daha olası görünüyor. Çekirdeğin OOM katili tekmelediğinde ilk önce / proc / PID / oom_score_adj değerine göre en kötü suçluları öldürür. Çıktınızda kanıtlandığı gibi, mysqld önce gitti. My.cnf dosyasındaki ayarları VM'nizin kısıtlamalarına uyacak şekilde daha uygun şekilde ayarlamanız gerekebilir. Geçici / geçici bir çözüm olarak, yalnızca OOM katili tekmelemekten kaçınabileceğinizi görmek için ek sanal bellek için bir takas dosyası eklemeyi deneyin; gerçek sorununuzu belirledikten sonra ondan kurtulun.
loopforever
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.