node.js内存泄露问题记录





先说一下。事情的来龙去脉。


公司开发一款游戏棋牌游戏,服务端的开发是IO密集型,开发的时候,考虑过使用python,java,node.js。
终于选择了node.js(node.js宣传的杀手功能。异步IO,node.js另外一个分支叫io.js),事情也就由此而起。


由于第一次做手机游戏。对移动网络的预计不足。选择了json作为通信数据传输格式。上线后玩家就频繁掉线(通信数据量太大,移动网络hold不住),
于是想了一个解决方式,把json数据用zip压缩一下,事情好像就万事大吉了(尽管也有不少玩家反应掉线问题,但事情状况已经好非常多了)。
開始的时候呢。我们的玩家并不多。cpu的使用率并不高。系统一切正常,后来玩家越来越多,就出现了一个问题服务端开发长出现的问题内存泄露。
每过几天后,玩家的内存就涨上去了。内存泄露对于我们的系统来说,也说不上太严重。每过几天重新启动一次就能够了。






step1.開始分析我们的代码。看那些代码可能导致内存泄露,由于内存泄露发生在我们的网关进程中。代码量是比較少的,
研究了好些时间,期间也怀疑了好多事情,但写的測试代码都无法证实。

问题就这么拖下去了,写一个定时器脚本,在某个时刻重新启动网关进程。


step2.事情就这么放下,每过一段时间,想起这个问题,又纠结一番。開始做第二个项目了(第二个项目使用mqtt。
以及參照protobuf自己写的一套编解码代码,攻克了json数据太大的问题)。项目并不成功,用户眼下用户不多,系统没有发生内存泄露的问题。




step3. 同事突然想起,会不会是由于zip压缩json数据占用了cpu,我们设想的业务是IO密集型。如今看来就是CPU密集型了。cpu密集,然后node.j的GC工作出现了问题?。





原文地址:https://www.cnblogs.com/tlnshuju/p/7124446.html