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工作出现了问题?。
最新文章
- iOS开发--ChildViewController实现订单页的切换
- 错误:java.util.Map is an interface, and JAXB can't handle interfaces.
- DOCKER 为新启用的容器配置外网IP
- run命令
- Mac OS的phpize空信息解决办法
- html页面加载和解析流程
- 生成动态前缀且自增号码的Oracle函数
- HDU 1796How many integers can you find(简单容斥定理)
- IOS 使用IOS6苹果地图
- Ansible 运维自动化 ( 配置管理工具 )
- 转转hybrid app web静态资源离线系统实践
- HDU 5514
- [R] t.test()
- [UE4]宏
- 已经卸载了hyper-v 仍然提示 vmware 与 hyper-v 不兼容;天天模拟器,提示VT模式没有开启,BIOS里面已经设置过了
- form表单序列化为json格式数据
- Harbor快速部署到Kubernetes集群及登录问题解决
- The POSIX API/nss/nscd
- Python之上下文管理器
- Tinkoff Challenge - Elimination Round B. Igor and his way to work(dfs+优化)
热门文章
- Non-maximum suppression(非极大值抑制算法)
- 线段树 Mayor's posters
- 有关C语言指针访问问题
- ASP.NET(四):ASP.net实现假分页显示数据
- 九度oj 题目1048:判断三角形类型
- 【Luogu】P2680运输计划(树上差分+二分)
- Java 面试参考指南 — 同步
- 单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题
- 送外卖(codevs 2800)
- Cards BZOJ 1004