分享一个今天遇到的.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完全停止工作,删掉这两行代码问题就解决了。
以自动调用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完全停止工作,删掉这两行代码问题就解决了。