Memcached eşzamanlılık w / lighttpd php

4 Cevap php

Ben memcached bir sorun yaşıyorum. Bu memcached eğer, php, ya da tcp soketleri emin ama ben her memcached bir sayfa için 50 veya daha fazla eşzamanlılık ile bir kıyaslama deneyin, bu isteğin bazı apache ab kullanarak başarısız değil. Ben (99) istenen adres hatası atanamıyor olsun.

Ben düzenli phpinfo 5000 bir eşzamanlılık test yapmak () sayfa. Her şey yolunda. Hiçbir istekleri başarısız oldu.

Memcached yüksek eşzamanlılık bakamam ya da ben bir şey eksik gibi görünüyor? Ben-c 5000 bayrağı ile memcached koşuyorum.


Sunucu: (2) Dört Çekirdekli Xeon 2.5GHz, 64GB ram, 4TB Raid 10, 64bit OpenSUSE 11.1

4 Cevap

Ok, I've figured it out. Maybe this will help others who have the same problem.

Sorun şeylerin bir kombinasyonu olabilir gibi görünüyor.

  1. Set the sever.max-worker in the lighttpd.conf to a higher number Original: 16 Now: 32

  2. Turned off keep-alive in lighttpd.conf, it was keeping the connections opened for too long. server.max-keep-alive-requests = 0

  3. Change ulimit -n open files to a higher number. ulimit -n 65535

  4. If you're on linux use: server.event-handler = "linux-sysepoll" server.network-backend = "linux-sendfile"

  5. Increase max-fds server.max-fds = 2048

  6. Lower the tcp TIME_WAIT before recycling, this keep close the connection faster. In /etc/sysctl.conf add: net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 3

    / Sbin / sysctl-p: emin ile yeniden zorlamak olun


Ben değişiklikleri yaptıktan sonra, benim sunucu şimdi, herhangi bir sorun olmadan 30.000 eşzamanlı bağlantı ve 1.000.000 eşzamanlı istekleri çalıştıran istekleri başarısız, ya da apache ab ile yazma hataları edilir.

Command used to benchmark: ab -n 1000000 -c 30000 http://localhost/test.php

Benim Apache bu kıyaslama bile yakın olamıyorum. Bana şimdi Apache güldürmek Lighttd. Yaklaşık 200 eşzamanlılık de Apache sürün.

Ben test amaçlı bir sayfa sayaç olarak kullanarak, sadece bir 4 bayt tamsayı kullanıyorum. Diğer php sayfaları bile 5.000 eşzamanlı bağlantı ve 100,000 istekleri ile çalışıyor. Bu sunucu beygir gücü ve ram sürü var, bu yüzden bu sorun değil biliyorum.

Memcached kullanarak sayfa sayacını test etmek için kod 5 satıra şey var ama ölmek gibi görünüyor sayfa. (99) istenen adresi atanamıyor: bağlantı yapma bana bu hatayı veriyor.

  • Bu sorun, 50 eşzamanlı bağlantı ile başlayan ortaya başlar.
  • Ben-c 5000 eşzamanlılık için 5000 memcached koşuyorum.
  • Her şey tek bir makinede (localhost) üzerinde
  • Sadece işlem çalışan SSH, Lighttpd, PHP, ve Memcached olduğunu
  • Bu kutuya bağlanan herhangi bir kullanıcı (test makinesi) vardır
  • Linux-NoFile 32000 ayarlanır


Ben daha buldum ben şimdi, ben daha fazla bilgi göndeririz tüm bulunuyor. Bu sorunu olan bir sürü insan var gibi görünüyor.

Ben sadece bir dosya ile benzer bir şey test;

$mc = memcache_connect('localhost', 11211);
$visitors = memcache_get($mc, 'visitors') + 1;
memcache_set($mc, 'visitors', $visitors, 0, 30);
echo $visitors;

nginx, FCGI ve memcached küçük bir sanal makinede çalışan.

Koştum hataları görmeden aynı ağda benim laptop ab -c 250 -t 60 http://testserver/memcache.php .

Nerede hata görüyorsunuz? Php hata log?


: Bu benim / etc / sysctl.conf @ Rackspace Memcached / Couchbase / Kuklanın ile sunucuların adamak bu satırları ekleyerek Nginx / php-fpm için kullanılan budur

# Memcached fix

net.ipv4.ip_nonlocal_bind = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 3

Umarım işe yarar.