2013-01-04 13 views
7

ben MongoDB içinde beklenmedik bir şekilde kapandı bağlantıları için çok arama oldum ama sadece kendi bağlantılarını kapatmak için İSTİYORUM insanlardan yanıtlarını bulabilirsiniz. Ben düğüm-mongodb yerli bir db bağlanmak için kullanıyorum ama rastgele almaya devamdüğüm-mongodb-yerli MongoClient beklenmedik kapanış bağlantıları

: mesajlar "Hata bağlantı kapatıldı". İsteği manuel olarak tekrar denediğimde (tarayıcı yenilenir) istek çalışır.

bu neyin neden olduğunu bilen var mı? Yardımcı olacak bazı basit bir seçenek var mı?

kullanıyorum benim db kolu alıyorum:

 MongoClient.connect(connection_string, { auto_reconnect: true }, function (err, db) { 
    //server code/routes in here 
    } 

Ben https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/server.js ile bakıyordu ama beni açma edilir bağlantı havuzları genelde yönetildiği nasıl benim sınırlı anlayış biliyoruz. Sunucumun ömrü boyunca açık kalacağı izleniminin altındaydım. Birisi yardım edebilir mi?

Düzenleme: mjhm adlı okuma, ben TCP derinliklerine bakmaya başladı sonra canlı tutmak. Bazı siteler arasında, bu Azure'un yaptıklarını öne sürdü (ve bu soru şu anda yanlış sınıflandırıldı!). Görünüşe göre, Azure yük dengeleyici, 1 dakikalık etkinlikten sonra bağlantıları öldürüyor. Ben Azure Web Siteleri kullanıyorum, bu yüzden veya olmayabilir geçerli olabilir, ama bu anlayış soruşturmanın yeni bir satır başlatmak için yeterli umut verici olduğunu düşünüyorum. Burada http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

+0

daha bilgi verebilir misiniz? DB localhost veya başka bir makineniz var mı? Bağlantı kapalı mesajlar hangi db çağrılarını tetikliyor? Sunucuda ne kadar yük var? Etc. – mjhm

+0

Merhaba, db mongohq üzerinde barındırılıyor. Serviste çok az yük var. Sorunu güvenilir bir şekilde yeniden üretemiyorum, ancak find() çağrılarının kesin olarak başarısız olduğunu görüyorum. Node-mongodb-native sürücüsünde keepAlive bayrağını sabit kodlamayı denedim, ancak bu da işe yaramadı. –

+2

Bu not bazı öneriler vardır, http://christiankvalheim.com/post/32209721702/tcp-keepalive – mjhm

cevap

5

Daha fazla detay: http://christiankvalheim.com/post/32209721702/tcp-keepalive

TCP keepalive One thing that comes up quite frequently as a question when using the mongodb node.js driver is a socket that stops responding. This usually have two sources.

There is a firewall in between the application and the mongodb instance and it does not observe keepAlive.

The socket timeout is to high on your system leaving the socket hanging and never closing. The first situation can be remedied by setting the socket connection options and enabling keepAlive and setting a hard timeout value on the socket. This will ensure that a correctly configured firewall will keep the connection alive and if it does not it will timeout. The other thing to tweak is the os tcp_keepalive_time. Basically it’s to high for something like MongoDB (default 2 hours on linux). Setting this lower will correctly timeout dead sockets and let the driver recover.

A good link to read more about it. http://www.mongodb.org/display/DOCS/Troubleshooting#Troubleshooting-Socketerrorsinshardedclustersandreplicasets