gochat icon indicating copy to clipboard operation
gochat copied to clipboard

关于服务端保存websocket.conn的疑惑

Open Owen-Zhang opened this issue 5 years ago • 2 comments

保存conn时用到了bucket, 这个在最下层还是使用了map golang中的map有一个很大的问题:delete根本就没有真删除,只是标识了一下,也就是说内存根本就没有free 随着conn的进进出出,长时间运行下去这块内存是不是泄露了呢(内存会慢慢增加),这只是我的一个疑惑

note: 看map源码, 它实际有一个扩容机制,如果达到扩容条件时,会新建map底层数据(原来的内存就会被free),这样想想好像也不会存在上面的问题

望大哥说说你的想法呢

Owen-Zhang avatar Jul 14 '20 11:07 Owen-Zhang

golang本身是存在gc机制的语言,你也可以在逻辑中可以主动触发gc,如果你想验证map 内存问题,可以写个测试看看

LockGit avatar Jul 14 '20 15:07 LockGit

保存conn时用到了bucket, 这个在最下层还是使用了map golang中的map有一个很大的问题:delete根本就没有真删除,只是标识了一下,也就是说内存根本就没有free 随着conn的进进出出,长时间运行下去这块内存是不是泄露了呢(内存会慢慢增加),这只是我的一个疑惑

note: 看map源码, 它实际有一个扩容机制,如果达到扩容条件时,会新建map底层数据(原来的内存就会被free),这样想想好像也不会存在上面的问题

望大哥说说你的想法呢

不会内存泄露。Golang GC的时候会把完全没有用到的内存释放。之前有做过go websocket的后端服务,正常情况不会有问题

pathbox avatar Oct 13 '20 12:10 pathbox