最近一个项目使用Mongodb数据库,最初系统运行1天就崩溃了(白天每小时平均PV1000),无论是程序连接Mongodb还是MongoVUEl连接Mongodb都连接不上,报“由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 127.0.0.1:27017.”错误。娘的啥原因?
通过度娘了解到,需要设置C#连接Mongodb的连接吃,修改原来默认的连接池大小。
设置代码如下:
public DB()
{
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
settings.MinConnectionPoolSize = 10;
settings.MaxConnectionPoolSize = 30;//设定最大连接池
//等待列队数量
settings.WaitQueueSize = 20;
var client = new MongoClient(settings);
var server = client.GetServer();
Database = server.GetDatabase(dbName);
}
经过连接池设置后,系统运行7天内没有任何问题,但是7天后还是报同样的错误。娘的咋又出问题了
再次度娘无果,后来无意思索,觉得此错误应该是windows系统设置问题。调整度娘查询关键词。最终发现通过设置系统的windows TCP设置解决。
windows系统设置如下:
1. 打开注册表
2. 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下面可以增加一个MaxUserPort参数,设置MaxUserPort设置为65534(十进制)
3. 同样设置TcpTimedWaitDelay参数,其默认为120秒,修改为30秒,表示一个关闭后的端口等待30秒之后可以重新使用
到此设置完毕,系统运行30天没有崩溃,之前的错误也不再出现。
补充:
之前配置MaxUserPort和TCPTimeWaitDelay之后系统运行1个多月,又出现同样错误,目前增加两项参数配置观察系统运行情况(目前运行),配置如下:
参考: