Redian新闻
>
分享一个今天遇到的.net调用mongodb的问题
avatar
分享一个今天遇到的.net调用mongodb的问题# DotNet - 窗口里的风景
W*n
1
在一个小webService里第一次使用mongodb,很习惯的把dal做成idisposable,这样可
以自动调用connect/disconnect。因为是内部service,所以访问量不大,一直没有出
现什么问题。昨天下午开始一个app开始疯狂发请求,500 req/sec,到今天早上8点
application pool就当掉了。
显示的错误是An operation on a socket could not be performed because the
system lacked sufficient buffer space or because a queue was full. 搜了一圈
发现是mongodb server的tcp connection被全部用光,网上大部分建议是调节
TcpTimedWaitDelay和userMaxPort,可这样就算分配再多的port也有用完的时候。
最后发现是10gen的.net driver比较奇特,显示调用connect/disconnect会让driver自
己的connection pool完全停止工作,删掉这两行代码问题就解决了。
avatar
W*n
2
说实话还是比较感谢那位仁兄帮我做了load test..Hehe

【在 W********n 的大作中提到】
: 在一个小webService里第一次使用mongodb,很习惯的把dal做成idisposable,这样可
: 以自动调用connect/disconnect。因为是内部service,所以访问量不大,一直没有出
: 现什么问题。昨天下午开始一个app开始疯狂发请求,500 req/sec,到今天早上8点
: application pool就当掉了。
: 显示的错误是An operation on a socket could not be performed because the
: system lacked sufficient buffer space or because a queue was full. 搜了一圈
: 发现是mongodb server的tcp connection被全部用光,网上大部分建议是调节
: TcpTimedWaitDelay和userMaxPort,可这样就算分配再多的port也有用完的时候。
: 最后发现是10gen的.net driver比较奇特,显示调用connect/disconnect会让driver自
: 己的connection pool完全停止工作,删掉这两行代码问题就解决了。

avatar
s*w
3
Is it possible that you "显示调用connect/disconnect" method?
to call Dispose() or Close() method will close all the connection pool.
Does using block work?
Use using block for the connection, will dispose the single connection and
return to the pool.

【在 W********n 的大作中提到】
: 在一个小webService里第一次使用mongodb,很习惯的把dal做成idisposable,这样可
: 以自动调用connect/disconnect。因为是内部service,所以访问量不大,一直没有出
: 现什么问题。昨天下午开始一个app开始疯狂发请求,500 req/sec,到今天早上8点
: application pool就当掉了。
: 显示的错误是An operation on a socket could not be performed because the
: system lacked sufficient buffer space or because a queue was full. 搜了一圈
: 发现是mongodb server的tcp connection被全部用光,网上大部分建议是调节
: TcpTimedWaitDelay和userMaxPort,可这样就算分配再多的port也有用完的时候。
: 最后发现是10gen的.net driver比较奇特,显示调用connect/disconnect会让driver自
: 己的connection pool完全停止工作,删掉这两行代码问题就解决了。

avatar
W*n
4
10gen的MongoClient和MongoServer都不是IDisposable.我之前说用using只是用在我自
己的DAL wrapper。我说显示调用调用也无非就是
mgSvr.Connect();
mgSvr.Disconnect();
既然mongodb文档说不建议调用这两个方法,那就全都留给driver处理好了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。