2013-01-04 26 views
7

Tôi đã tìm kiếm rất nhiều kết nối bị đóng bất ngờ trong mongodb nhưng chỉ có thể tìm câu hỏi từ những người muốn kết nối của họ đóng.MongoClient node-mongodb-native MongoClient bất ngờ đóng các kết nối

Tôi đang sử dụng nút-mongodb-native để kết nối với một db, nhưng tôi tiếp tục nhận được dường như ngẫu nhiên "Lỗi: kết nối đóng" tin nhắn. Nếu tôi thử lại theo cách thủ công yêu cầu (làm mới trình duyệt), yêu cầu sẽ hoạt động.

Bất kỳ ý tưởng nào gây ra điều này? Có một số tùy chọn đơn giản mà sẽ giúp đỡ?

tôi nhận xử lý db của tôi sử dụng:

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

tôi đang tìm kiếm thông qua https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/server.js nhưng tôi nhận ra sự hiểu biết hạn chế của tôi về cách hồ kết nối được quản lý nói chung được vấp ngã tôi lên. Tôi đã được ấn tượng rằng họ sẽ ở lại mở cho suốt đời của máy chủ của tôi. Ai đó có thể giúp đỡ?

Chỉnh sửa: Sau khi đọc nhận xét của mjhm, tôi bắt đầu tìm hiểu sâu hơn về TCP tiếp tục sống. Vượt qua một số trang web cho thấy điều này có thể là Azure đang làm (và câu hỏi này hiện đã được phân loại sai!). Rõ ràng, bộ cân bằng tải Azure giết kết nối sau 1 phút hoạt động. Tôi đang sử dụng các trang web Azure, vì vậy nó có thể hoặc không thể áp dụng, nhưng tôi nghĩ rằng cái nhìn sâu sắc này đủ hứa hẹn để bắt đầu một dòng điều tra mới. Xem thêm chi tiết tại đây http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

+0

bạn có thể cung cấp thêm thông tin? DB localhost của bạn hay máy khác? Cuộc gọi db nào đang kích hoạt các thông báo kết nối đóng? Bao nhiêu tải trên máy chủ? Vv – mjhm

+0

Xin chào, db được lưu trữ trên mongohq. Có rất ít tải trên dịch vụ. Tôi không thể tái tạo một cách đáng tin cậy vấn đề, nhưng tôi nhận thấy các cuộc gọi find() không chắc chắn. Tôi đã thử hardcoding cờ keepAlive thành true trong ổ đĩa gốc-mongodb, nhưng nó cũng không hoạt động. –

+2

Lưu ý này có một số đề xuất, http://christiankvalheim.com/post/32209721702/tcp-keepalive – mjhm

Trả lời

5

Từ: 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

Các vấn đề liên quan