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工作出现了问题?。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值