go的mgo,连接未释放问题,连接泄露。
2024-10-13 17:54:44
api启动几天后,卡住(连接失败,超时)
异常原因
mongo连接被占满,无法建立mgo连接,返回信息
查询点用端口可知,97%的连接被api项目占用。
api项目的mongodb连接“泄露”,某处的连接没有断开,不断累加。
排查出问题来源。
简单代码示例(这代码有,没有错误检测,也不会编译成功,知道意思即可)
func demo() {
session, collection, err := GetCollection(DBNAME, COLLECTIONNAME)
defer session.Close()
}
第一次初始session对象,这个session对象是A
demo方法执行完毕会调用 session.Close()将A的mongodb连接释放掉。
func demo() {
session, collection, err := GetCollection(DBNAME, COLLECTIONNAME)
defer session.Close()
session, collection, err = GetCollection(DBNAME, COLLECTIONNAME)
}
这样便会出现连接“泄露”。
因为初始化了另一个sesseion对象B
demo执行到第三句是,session的引用指向了对象B,而对象A的引用则丢失了,A成了野对象。
demo执行完毕后,session.Close()释放了B的mongodb连接,但是A对象引用已经丢失,A的mongodb连接,永远不会得到释放。
垃圾回收可以把野对象回收了(内存回收),但是野对象所对应的socket并没有被释放(资源回收)
这是很基础的错误,不该出现的错误。
最新文章
- PHP 之道
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes
- JS重点特性——闭包详解
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表";练习)
- 在C#中使用 Win32 和其他库
- iOS 8自定义动画转场上手指南
- bootstrap快速入门笔记(七)-表格,表单
- Android基础夯实--你了解Handler有多少?
- Intellij-创建Maven项目速度慢
- 配置 github 上的程序
- JavaScript进阶-this
- 如何实现文件上传 - JavaWeb
- java开发学生信息管理系统的实现(简洁易懂),适合计算机专业学生参考,课程设计、毕业论文设计参考等
- laravel5.5 env
- 将正在运行的Proxmox EV5.x版本更新到最新版本
- 【mysql】mysql常用语句
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
- CRF++地名实体识别(特征为词性和词)
- 判断资源贴图是否有alpha
- Log4Net从Mvc转到.Net Core
热门文章
- SQL Server Reporting Services (SSRS): Reporting Services in SQL Server 2012 (codename ";Denali";) will support XLSX, DOCX formats. Bye bye 65536 rows limit in XLS files ;)
- SQL Server附加数据库出现错误5123的正确解决方法
- html5 placeholder ie 不兼容问题 解决方案
- 使用HttpClient获取网上字符串和位图对象Bitmap
- c++中resize函数怎么用
- Python 3.6.0的sqlite3模块无法执行VACUUM语句
- Apache Server 添加虚拟主机(Virtual Host )
- Sql Server中不常用的表运算符之APPLY(1)
- 通过属性 Cesium的FBO主要支持两种方式
- CSS实现DIV超长截断,并显示...