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

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

go的mgo,连接未释放问题,连接泄露。的更多相关文章

  1. jsch连接sftp后连接未释放掉问题排查

    项目中通过jsch中的sftp实现上传下载文件.在压测过程中,由于调用到sftp,下载文件不存在时,系统不断抛出异常,内存飙升,逐渐把swap区也占满,通过top监控未发现占用内存的进程,通过查找ss ...

  2. 记录Redis连接未正确释放,TCP连接过多,造成服务器上部分功能不可用和linux服务器内存一直增加问题

    问题1 多人共享开发服务器(windows系统),我们小组有个程序,定时检测mongodb,redis,mysql连接是否正常,程序启动一段时间后,服务器管理人员找到我们说,我们的某个pid的程序把T ...

  3. “ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”

    Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) T ...

  4. paip.jdbc 连接自动释放的测试

    paip.jdbc 连接自动释放的测试 使用的mysql jdbc3.1.6  以及5.1.7 测试结果,在没有conn.close()的情况哈.. 作者Attilax  艾龙,  EMAIL:146 ...

  5. TCP建立连接和释放的过程,及TCP状态变迁图

    一.TCP报文格式 下面是TCP报文格式图: 重要字段介绍: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占 ...

  6. ArcGis连接oracle失败:ORA-6413:连接未打开

    问题: 通过ARCMap 添加Oracle数据库连接时提示,ORA-6413:连接未打开. 运行环境: ArcGis 10.2 Oracle 10g 解决方法: 通过上网查找解决方法,网友说" ...

  7. 简述采用四次握手机制释放TCP连接的四个步骤

    (1)源结点A向目的结点B发送连接释放请求(FIN,seg=x),并且不再向B发送数据,但仍继续接收从B发来的数据. (2)目的结点B收到此连接释放请求后立即向A发出确认(ACK,ack=x+1),但 ...

  8. 无线基站侧的信令风暴根因——频繁的释放和连接RRC产生大量信令、设备移动导致小区重选信令增加、寻呼信令多

    全局思维(核心网和无线基站侧都会有信令风暴): LTE网络系统可能出现信令风暴的原因,大致可以总结出以下几点: 1.网络架构的变化,导致4G核心网信令流量较2G/3G大幅增加 a)架构扁平化:LTE网 ...

  9. TCP建立连接与释放连接过程中的几个问题

    TCP为何采用三次握手来建立连接,若采用两次握手可以吗,请说明理由? 不可以.采用三次握手是为了防止失效的连接请求报文段突然又传送到服务器,从而发生错误.当客户端发出的连接请求报文段由于某些原因没有及 ...

随机推荐

  1. spring下载及部署

    网址http://repo.spring.io/release/org/springframework/spring Bean配置项 Id : 在IOC容器中此Bean唯一标识 Class : 要实例 ...

  2. autolayout

    autolayout.因为之前都是用frame,用代码来做,并且在布局时也很少用storyboard和xib.使得我再这方便经验很欠缺,想用,但是又怕用不好,出现各种意想不到的bug.但是又忽然想到, ...

  3. python 常用高效代码写法集锦

    一.打开文件 #使用 with 语句操作文件对象 with open(r'somefileName') as somefile: for line in somefile: print line # ...

  4. SQL数据库与excel表格之间的数据 导入

  5. xgboost原理及应用

    1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT 地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboo ...

  6. windows下多字节和宽字节转换

    先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽 ...

  7. 类似于QQ的简单的聊天代码

    先编辑页面 package com.lovo.feichun; import java.awt.Color;import java.awt.Component;import java.awt.Cont ...

  8. jenkins调度selenium脚本不打开浏览器解决办法

    原文地址: http://blog.csdn.net/achang21/article/details/45096003 The web browser doesn't show while run ...

  9. prolog --寻找neni (2)

    混合查询 我们可以把简单的查询连接起来,组成复杂的查询. ?- location(X,kitchen),edible(X). 简单查询只有一个目标,而混合查询可以把这些目标连接起来.从而进行较为复杂的 ...

  10. webstorm 2016 激活(转)

    2016.2.2 版本的破解方式: 安装以后,打开软件会弹出一个对话框:选择"license server" 输入:http://114.215.133.70:41017 2016 ...