Kurulumum: DNS üzerinden basit yük dengeleme ile aynı yüksek yüklü dinamik web sitesine hizmet veren neredeyse aynı 3 web sunucusu makinem var. Hizmet iki yıldır aynı apache yapılandırmasıyla çalışıyor: apache2, php5, ubuntu 8.04 linux 2.6.24-29-server.
Benim sorunum: Yaklaşık iki hafta önce bu yapılandırma ile ilgili sorunlar yaşıyorum. Neredeyse her gün, web sitesine erişilemeyen yaklaşık 5 dakika boyunca küçük bir anım var. Hala ssh üzerinden sunuculara giriş yapabiliyorum. Eğer koşarsam htop
, makinenin sadece hiçbir şey yapmadığını görürüm. Yaklaşık 1000 apache işlemi var, ancak cpu aktivitesi yok.
Bu durumu ayıklamak için apache mod_status'u kullandım. Süreç skorbordu şöyle görünür:
_C.___K_______________________R._______.__K_K____K___C_______.__
_______C__________.___________________________________.________C
_.____K__________K___K_WK_____._K_____________________________._
W______K__________K________.____________________._______C_______
_C_.__K__K____.._.._____________________________________C_______
_R___________K___.______C________.C_________.______._____C______
____________KKC____K_____K__WC_________________C_____.__.____.__
_____________________C_________K______.____C______._____________
_.___C____.___.___________________________.K______.____K________
W__.___________________C.__.____K________K_______R_._.__._______
__C__C_.__________C__C_______._____W______________C_.___C_______
____.______C_____________C________.____C____________.________._K
__.__________.K_____________K_________._____C____.K__________KW_
__K.W________R_________._______.___W___________.____.__K_____W__
W___.___..________W____K
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
Yani süreçlerin çoğu sadece bağlantıyı bekliyor. yaklaşık 5 dakika sonra durum normale dönecektir: ben her makinede çok az süreç var, çoğu işçi "." - durumu (bir istek işlemek için açık olan meaing) ve tabii web sitesine ulaşılabilir!
Bu yüzden günlüklerde bir şey bulmaya çalışıyorum, ama hiçbir şey yok ... apache erişim günlüğü yaklaşık 4 dakika sessiz, aynı hata günlüğü için. Ayrıca diğer sistem günlüklerinde yanlış bir şey bulamıyorum.
Durum tüm 3 web sunucuları aynıdır (hepsi aynı anda bu yük tepe ve yanıt vermeyen durumu var), bu yüzden bu donanım ile ilgili bir şey yok. ancak bu bazı ağ (tcp) sorunu ile ilgili olabilir düşünüyorum.
herhangi bir fikir?
EDIT: yeni keşfettiğim bazı bilgiler:
Yine oldu ve bu sorun ortaya çıktığında yerel olarak bağlanamadığımı doğrulayabildim.
Ben gerçekleştikten sonra aşağıdaki komut ile bazı bağlantı istatistikleri yaptık: netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
- 109 CLOSE_WAIT
- 2652 KURULDU
- 2 FIN_WAIT1
- 11 LAST_ACK
- 12 DİNLE
- 91 SYN_RECV
- 1 SYN_SENT
- 16 TIME_WAIT
Bir süre sonra aynı komutu çalıştırırsam, şöyle bir şey var:
- 4 KAPANIŞ
- 108 KURULDU
- 18 FIN_WAIT1
- 182 FIN_WAIT2
- 37 LAST_ACK
- 12 DİNLE
- 50 SYN_RECV
- 11276 TIME_WAIT
Yani normal durumda, şu anda apache tarafından işlenen müşteriler tarafından sadece 100-200 açık bağlantım var. Bu "çökme" olduğunda, çok daha fazla bağlantı var. Bunu analiz etmenin en iyi yolu nedir?
EDIT2: apache2.conf dosyasındaki önemli satırlar:
KeepAlive On
MaxKeepAliveRequests 20
KeepAliveTimeout 1
<IfModule mpm_prefork_module>
ServerLimit 920
StartServers 30
MinSpareServers 80
MaxSpareServers 120
MaxClients 920
MaxRequestsPerChild 700
</IfModule>
Php_mod ile bir apache2 prefork'tur.
Sunucuda 8GB ram ve 4gb takas bölümü var.
tcpdump
) sorunun köküne ulaşmanıza yardımcı olacaktır ... btw bellek kullanımınız ve güvenlik duvarı politikalarınız nedir?