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并没有被释放(资源回收)

这是很基础的错误,不该出现的错误。

最新文章

  1. PHP 之道
  2. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格Meshes
  3. JS重点特性——闭包详解
  4. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
  5. 在C#中使用 Win32 和其他库
  6. iOS 8自定义动画转场上手指南
  7. bootstrap快速入门笔记(七)-表格,表单
  8. Android基础夯实--你了解Handler有多少?
  9. Intellij-创建Maven项目速度慢
  10. 配置 github 上的程序
  11. JavaScript进阶-this
  12. 如何实现文件上传 - JavaWeb
  13. java开发学生信息管理系统的实现(简洁易懂),适合计算机专业学生参考,课程设计、毕业论文设计参考等
  14. laravel5.5 env
  15. 将正在运行的Proxmox EV5.x版本更新到最新版本
  16. 【mysql】mysql常用语句
  17. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
  18. CRF++地名实体识别(特征为词性和词)
  19. 判断资源贴图是否有alpha
  20. Log4Net从Mvc转到.Net Core

热门文章

  1. 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 ;)
  2. SQL Server附加数据库出现错误5123的正确解决方法
  3. html5 placeholder ie 不兼容问题 解决方案
  4. 使用HttpClient获取网上字符串和位图对象Bitmap
  5. c++中resize函数怎么用
  6. Python 3.6.0的sqlite3模块无法执行VACUUM语句
  7. Apache Server 添加虚拟主机(Virtual Host )
  8. Sql Server中不常用的表运算符之APPLY(1)
  9. 通过属性 Cesium的FBO主要支持两种方式
  10. CSS实现DIV超长截断,并显示...