[node]关于内存,求大神拯救啊~~

2013-05-30 20:05:00 +08:00
 zztczcx
1,目前不管是tls长连接还是普通的tcp长连接 write数据内存就不停的涨。有什么办法回收一下吗?

2.当连接断开后,内存也不会完全释放掉,会残留很多。

测试代码:
https://gist.github.com/zztczcx/5676835
3379 次点击
所在节点    问与答
6 条回复
clowwindy
2013-05-30 20:16:08 +08:00
1. 你没 on data 处理数据,数据堆起来了
2. Write 没检查返回值,缓冲区满了还继续写,应该 on drain 时再继续写
zztczcx
2013-05-30 20:58:03 +08:00
我修改了测试代码, 加了read 和 write 检查 ,内存还是 涨啊。
zztczcx
2013-05-30 21:06:44 +08:00
@clowwindy 按理说,node网络不堵塞的情况下, write 后 缓冲区应该就清空了。
加了data事件 不处理的话,数据应该也就被抛弃了。

但目前的测试是内存不停的增加。而且我一段时间后取消了写数据,内存也会维持在之前的状态,不会回收。
clowwindy
2013-05-30 21:41:34 +08:00
@zztczcx 另外,你的 node 是什么版本?
clowwindy
2013-05-30 21:51:30 +08:00
node 0.10,100% 重现 server 内存不断上涨的问题(我把发送的数据改大了看的更明显)

加一行 s.on('data',function(){}); 就好。原因很简单,一开始 s 是 pause 状态,来了数据一直堆在内存里。除非加上 on data 的监听。
在实际中,写入方还要检查 write 的返回值,因为网速不够的时候,数据还会堆在写入方的缓冲区里。

http://gist.github.com/clowwindy/5677933
fangzhzh
2013-05-30 22:09:26 +08:00
@clowwindy 一个感谢送上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX