GoLang MongoDB连接泄漏
你好 下面是一个代码示例,它每秒都从MongoDB执行检索。 我的问题是每次检索时都会打开额外的连接(根据MongoDB日志) 代码: MongoDB日志:GoLang MongoDB连接泄漏,mongodb,go,connection,mgo,Mongodb,Go,Connection,Mgo,你好 下面是一个代码示例,它每秒都从MongoDB执行检索。 我的问题是每次检索时都会打开额外的连接(根据MongoDB日志) 代码: MongoDB日志: Starting mongo worker ... Creating session ... Session created! Retrieving data ... Creating collection ... Collection created! Total retrieved: 3 documents. Retrievin
Starting mongo worker ...
Creating session ...
Session created!
Retrieving data ...
Creating collection ...
Collection created!
Total retrieved: 3 documents.
Retrieving data ...
Creating collection ...
Collection created!
Total retrieved: 3 documents.
Retrieving data ...
Creating collection ...
Collection created!
Total retrieved: 3 documents.
Retrieving data ...
2017-08-03T11:24:53.600+0300 I NETWORK [initandlisten] waiting for connections on port 27017
2017-08-03T11:25:38.785+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54591 #1 (1 connection now open)
2017-08-03T11:25:41.952+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54592 #2 (2 connections now open)
2017-08-03T11:25:45.260+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54593 #3 (3 connections now open)
2017-08-03T11:26:19.327+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54594 #4 (4 connections now open)
2017-08-03T11:26:38.797+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54595 #5 (5 connections now open)
2017-08-03T11:26:41.964+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54596 #6 (6 connections now open)
2017-08-03T11:26:45.269+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54597 #7 (7 connections now open)
2017-08-03T11:27:19.338+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54599 #8 (8 connections now open)
2017-08-03T11:38:37.106+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54836 #9 (9 connections now open)
我做错了什么?Mongo中的连接数达到数千个,最终导致它死亡…每次复制会话时,都应该将其关闭 重写
GetCollection
和GetAllRows
,使用如下函数:
func FetchData(session mgo.Session, queueName string) ([]Data, error) {
fmt.Println("Creating collection ...")
sess := session.Copy()
collection := sess.DB(dbName).C(queueName)
fmt.Println("Collection created!")
defer sess.Close()
var results []Data
err := collection.Find(nil).All(&results)
if err != nil {
panic(err)
return nil, err
}
return results, nil
}
注意这一行
defer sess.Close()
目前,它总共只打开两个会话,并关闭其中一个会话-这不是最佳的,但不应导致连接数量不断增加。会话创建是在循环之外完成的。非常感谢您的回答!!
defer sess.Close()