Kaç bağlantıları / s ben ayrı bir sunucu üzerinde PHP ve MySQL arasındaki bekleyebilirsiniz?

2 Cevap php

Iki sunucu, php için ve mysql için birine benim LAMBASI uygulama ayırmaya çalışıyorum. Şimdiye kadar uygulama bir dosya soket aracılığıyla yerel bağlar ve gayet iyi çalışıyor.

Ben ağ üzerinden ise ben kurabilir sayı bağlantıları hakkında endişeleniyorum. Aksi nedeniyle kaynaklarının yetersizliği (bu prizler, veya dosya kolları olmak ya da ne durdurur ben kriter amaçlı UNix tcp bağlantılarını test edilmiş ve know saniyede bağlantı belli bir miktarın üzerinde olamaz .) I also understand that php does not implement connection pooling so for each page load a new connection over the network must be made. I also looked into pconnect for php and it seems to bring more problems.

Herkes kendi sunucularında çıkmak bazı tipik kullanımını ve istatistik sağlayabilir, bu çok çok yaygın bir kurulum (php + mysql) olduğunu biliyor musun? Teşekkürler!


Sorun benim MySQL izin verilen bağlantı bitmesi ile ilgili değildir. Asıl sorun unix cannot, çok hızlı bir şekilde oluşturmak ve tcp bağlantılarını yıkmak olduğunu. Yuva Time_Wait sonuna kadar ve tekrar bağlanmak için daha fazla yuva serbest önce bir süre beklemek zorunda. Bu iki ekran açıkça bu desen gösterir. MySQL belli bir noktaya kadar çalışmak ve web sunucusu yuvalarından dışarı koştu çünkü sonra duraklar yoktur. Geçen süre belirli bir süre sonra, web sunucusu yeni bağlantılar yapmak mümkün oldu.

alt text

alt text

2 Cevap

Ben limiti 65.535 olduğunu düşünüyorum. Yani normal bir mysql bağlantı otomatik olarak kapatır beri bu sınırı vurmak için aynı anda 65535 bağlantınız olması gerekiyor.

mysql_connect()

Not: açıkça mysql_close () çağırarak önce kapalı sürece sunucusuna bağlantı, kısa sürede script yürütme biter gibi kapalı olacaktır.

Bir persistent mysql connection kullanıyorsanız, o zaman sorun haline çalıştırabilirsiniz.

Kalıcı bağlantılarını kullanarak MySQL ile izin verilen bağlantı sayısını aşmamasını sağlamak için Apache ve MySQL yapılandırmaları ayarlama biraz gerektirebilir.

Her MySQL bağlantı aslında çeşitli tamponlar ram birkaç megabayt kullanır ve MySQL varsayılan olarak 100 eşzamanlı açık bağlantıları sınırlıdır neden olan, kurmak için bir süre alır. Bunu limiti olabilir, ancak çeşitli yöntemlerle, eş zamanlı bağlantıları sınırlamak için çalışırken zaman geçirmek için iyidir.

Eğer (mysql çöküyor ki, ben inanıyorum) bellek tükendi gibi, çok yüksek bağlantı sınırını yükselterek dikkat, ya da bellek önemli şeyler itebilir. örneğin MySQL performans işletim sistemi otomatik olarak belleğe diskten okur verileri önbelleğe derece bağlıdır; Eğer bağlantı sınırı çok yüksek ayarlarsanız, önbellek ile bellek için yarışma olacak.

Eğer bağlantı sınırına kadar yapmazsanız sizin prizler / dosya saplar / etc biterse, uzun bağlantıları dışarı kaçıyorum. Eğer bağlantı sınırını artırmak yaparsanız, size prizler / dosya saplar / etc biterse önce uzun RAM dışına kaçıyorum.

Eşzamanlı bağlantıları sınırlayıcı ilgili:

  1. Bir bağlantı havuzu çözümü kullanın. Haklısın, PHP yerleşik biri yoktur, ancak seçim için orada bağımsız olanlar bol vardır. Bu pahalı bir bağlantı kurulum / yıkmak zaman kazandırır.
  2. Sadece açık veritabanı bağlantıları kesinlikle onlara ihtiyacımız var. Benim geçerli projede, ilk sorgu kesilirken otomatik bir veritabanı bağlantısı açmak ve daha önce değil, bir an; hepimizin veritabanı çalışması yaptık, ama sayfanın HTML aslında önce oluşturulur sonra biz de bağlantı bırakın. Zaman periyodu kısa açık bağlantıları tutun, daha az bağlantı aynı anda açık olacaktır.
  3. Önbellek ne memcached gibi daha hafif çözeltide yapabilirsiniz. (Her anonim kullanıcı sonunda, aynı HTML alır beri - neden bir kaç kıt milisaniye sonra tekrar tekrar aynı veritabanı sorguları çalıştıran rahatsız?) Benim mevcut proje geçici sayfalar anonim kullanıcılara gösterilen önbelleğe, hiçbir veritabanı bağlantısı gerekli olup anlam hepsi. Bu bir ön sayfa digg gibi, anonim trafik patlamaları için özellikle yararlıdır.