求大神支援,调试out of memory的技巧
发布于 10 年前 作者 captainblue2013 5296 次浏览 最后一次编辑是 8 年前 来自 问答

OOM一直找不到原因,求大神帮助

10 回复

。。。代码呢 这样子 怎么给你看

@kissliux 怎么发给你?

贴下 log 吧

用BUFFER写需要内存的模块,或者你本来就有闭包内存溢出。

@MiguelValentine 问题是我找不出是哪个东西用的内存多,是socket.io吗?用户刷新以后,之前的实例不会被立即回收?

@leapon log就是打印了 out of memory

这个太难了,可能是自己代码泄的,也可能是第三方库泄的,还可能是node自身BUG泄的,定位很难。我的解决办法是: 1、把代码尽量放在子进程里做,执行完毕子进程就结束了,不怕泄露,从根子上消除麻烦。 2、定期重启,在内存溢出之前,有计划的、体面的自我了断 3、某些有泄露嫌疑,但又必须长期运行的重要模块,用D语言重写一下,辛苦一次,消灭尾巴

@wenbob 道理是这样,唉

内存泄漏也有可能是闭包引起的,详情参考这篇文章 http://mrale.ph/blog/2012/09/23/grokking-v8-closures-for-fun.html 大概是说同一级的闭包共享一个Context,返回的闭包通过Context间接引用了其他upvalue,可能导致内存泄漏。

@wenbob 你好,请问怎么定期重启啊?

回到顶部