求大神支援,调试out of memory的技巧
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 你好,请问怎么定期重启啊?