W********n 发帖数: 254 | 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完全停止工作,删掉这两行代码问题就解决了。 |
W********n 发帖数: 254 | 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完全停止工作,删掉这两行代码问题就解决了。
|
s*****w 发帖数: 215 | 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完全停止工作,删掉这两行代码问题就解决了。
|
W********n 发帖数: 254 | 4 10gen的MongoClient和MongoServer都不是IDisposable.我之前说用using只是用在我自
己的DAL wrapper。我说显示调用调用也无非就是
mgSvr.Connect();
mgSvr.Disconnect();
既然mongodb文档说不建议调用这两个方法,那就全都留给driver处理好了。 |