你们写的 NodeJS 程序有没有内存泄漏? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doubleflower
V2EX    Node.js

你们写的 NodeJS 程序有没有内存泄漏?

  •  
  •   doubleflower 2017-09-20 13:54:27 +08:00 8729 次点击
    这是一个创建于 2948 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从 Python 转 Node,写了三个微服务,尼玛每一个都出现了内存泄漏,连续运行几天就会 OOM。

    以前 Python 也写过几个,运行个几年都没问题的。
    第 1 条附言    2017-10-08 07:48:04 +08:00
    UPDATE: t/395867
    26 条回复    2017-09-26 14:49:23 +08:00
    iugo
        1
    iugo  
       2017-09-20 14:04:57 +08:00
    闭包用多了吧?

    对象深复制了吗?

    函数副作用太多了?
    SPACELAN
        2
    SPACELAN  
       2017-09-20 14:08:44 +08:00
    我记得最近有个版本的 node 本身就有 ssl 上的内存泄露。。
    keenwon
        3
    keenwon  
       2017-09-20 14:15:57 +08:00
    上代码
    janxin
        4
    janxin  
       2017-09-20 14:34:15 +08:00
    Python 也有内存泄漏啊...不过一般 wsgi 会自动进程重启
    Node 内存泄漏挺常见的,不过你这么严重的换个最新版本看看,如果还有问题应该还是使用有问题
    root787
        5
    root787  
       2017-09-20 15:15:35 +08:00
    可以试试 --max-old-space-size 这个参数。
    meisky6666
        6
    meisky6666  
       2017-09-20 15:20:20 +08:00   1
    神 tag
    tongchia
        7
    tongchia  
       2017-09-20 15:23:02 +08:00
    @meisky6666 神回复
    ygjack
        8
    ygjack  
       2017-09-20 15:48:38 +08:00
    你用什么框架写微服务?
    solee
        9
    solee  
       2017-09-20 16:31:44 +08:00
    我们公司用 node 写的很多服务,几个跑在一台阿里云上也。几年也没问题啊,上代码才是关键。
    yizi
        10
    yizi  
       2017-09-20 16:36:25 +08:00
    之前用 4.4.6 版本的时候发现内存回收有问题,用了 v7.4.0 就舒服多了,代码一点没动。
    misaka19000
        11
    misaka19000  
       2017-09-20 16:38:52 +08:00 via Android
    同样会经常内存爆掉,问下大神频繁的使用 promise 模式会导致内存过高吗?
    xream
        12
    xream  
       2017-09-20 16:39:20 +08:00 via iPhone
    懒得排查就设置 pm2 超内存自动重启…
    catinsides
        13
    catinsides  
       2017-09-20 16:41:35 +08:00
    有一次循环变量忘改了,运行的时候感觉好慢,就去了趟厕所,回来的时候报内存泄漏。

    嗯,就这一次。
    doubleflower
        14
    doubleflower  
    OP
       2017-09-20 17:21:41 +08:00
    代码有点多没法上。

    目前暂时用一个 setInterval 检查 process.memoryUsage()看内存是否高到指定值就主动自杀重启避免用光内存。

    以后有空了需要用正规方法看一下到底是哪个地方有泄漏。
    xiaoniuback
        15
    xiaoniuback  
       2017-09-20 17:23:31 +08:00
    排查一下是否有太多对象做缓存没有释放,或者一些队列没有释放,长期驻在老生代中,就会泄露
    mooncakejs
        16
    mooncakejs  
       2017-09-20 17:27:32 +08:00
    node 某几个版本有内存泄露的 bug, 你搜搜。
    不行上自动重启。
    lianyue
        17
    lianyue  
       2017-09-20 17:32:44 +08:00 via iPhone
    想简单解决的话用 pm2 就好了
    marvinwilliam
        18
    marvinwilliam  
       2017-09-20 17:57:42 +08:00
    写了好多个服务,小的倒是会出现这个问题,大的到现在还没遇到.

    然后你那个 M 之前的是什么数字....
    kn007
        19
    kn007  
       2017-09-20 17:59:19 +08:00 via Android
    my3157
        20
    my3157  
       2017-09-20 18:28:45 +08:00
    之前有个项目, 怀疑内存泄露, 一直没找到原因, 后来, 在 配置了 pm2 自动重启, 内存到 1G 就自动重启, 一直到现在稳定运行~~
    springwarm
        21
    springwarm  
       2017-09-20 21:20:37 +08:00
    @marvinwilliam Out Of Memory
    Pastsong
        22
    Pastsong  
       2017-09-20 21:47:39 +08:00
    内存泄漏是 NodeJS 的一部分,不爽不要写...
    vebuqi
        23
    vebuqi  
       2017-09-20 23:33:02 +08:00
    定时调一下 gc ?
    RickyWonng
        25
    RickyWonng  
       2017-09-26 14:20:08 +08:00
    之前写的高负载爬虫出现过内存炸的情况,但不是内存泄露,只是闭包引用导致的内存占用过高,调节一下负载,减少变量传递,注意点用字符串函数就可以了。
    doubleflower
        26
    doubleflower  
    OP
       2017-09-26 14:49:23 +08:00
    @RickyWonng 对,现在我发现了,我的三个服务只有一个是有泄漏的。

    其中二个是头一天运行的内存都在 400M 以内,二天后慢慢上去,会稳定在 700M RSS,我的内存自杀阀值 512 设得太低了。(难道是和 V8 有关,运行次数多了后 JIT 优化代码导致内存使用增加)。

    最后一个压图片的服务只有 200 行代码,太简单了所以没加内存高自杀设置,但运行十几天后内存爆掉了,用了 sharp 这个大 native 库,可能那个库有泄漏。
    关于     帮助文档     自助推广系统     博客 &nbs;   API     FAQ     Solana     6305 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:09 PVG 10:09 LAX 19:09 JFK 22:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86