V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zztczcx
V2EX  ›  问与答

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

  •  
  •   zztczcx · 2013-05-30 20:05:00 +08:00 · 3560 次点击
    这是一个创建于 4232 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1,目前不管是tls长连接还是普通的tcp长连接 write数据内存就不停的涨。有什么办法回收一下吗?

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

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

    但目前的测试是内存不停的增加。而且我一段时间后取消了写数据,内存也会维持在之前的状态,不会回收。
    clowwindy
        4
    clowwindy  
       2013-05-30 21:41:34 +08:00
    @zztczcx 另外,你的 node 是什么版本?
    clowwindy
        5
    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
        6
    fangzhzh  
       2013-05-30 22:09:26 +08:00
    @clowwindy 一个感谢送上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1087 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.