请大家帮忙看一个内存泄露的问题

stillwarter · · 1390 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我的一个线上程序,出现内存泄露问题,运行3-5天后内存居高不下,远超出该程序本应该占用的内存,我把出问题的这段代码贴出来,请大家帮忙看一下问题所在 <iframe style="border:1px solid" src="https://wide.b3log.org/playground/d1c55222ea6c82c14ed6359e8f6cb9d1.go" width="99%" height="600"></iframe> 在程序运行一段时间后,我使用go pprof查看goroutine和heap使用情况,发现heap异常: heap profile: 15926: 918443936 [252871: 990891280] @ heap/1048576 15393: 630497280 [15559: 637296640] @ 0x40f4f1 0x4054b3 0x403a95 0x401dc3 0x468961 0x4054b2 main.createSessionWithUrl+0x1992 0x403a94 main.createSession+0x1a4 0x401dc2 main.handleConnection+0x9d2 35: 280125440 [35: 280125440] @ 0x40f4f1 0x40574e 0x403a95 0x401dc3 0x468961 0x40574d main.createSessionWithUrl+0x1c2d 0x403a94 main.createSession+0x1a4 0x401dc2 main.handleConnection+0x9d2 这是heap的使用情况,可以看到这两个heap占用内存比较大,第一个heap有15393个对象,对应代码第55行,第2个heap有35个对象,对应代码第68行。 然后我查看goroutine情况,发现确实有35个startSessionProxy的goroutine,这符合我们的期望, 但是handleConnection这个goroutine只有694个,按道理一个handleConnection的goroutine应该对应一个gateServerConn对象, 也就是一个gateServerConn.gateChan对象,而我们看heap信息得到的gateChan数量是15393, 远远对不上,数毫无疑问是有内存泄露存在,但是我没有找到什么地方存在泄露,请大家帮帮忙!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1390 次点击  
加入收藏 微博
5 回复  |  直到 2017-02-20 06:38:43
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传