node js 调用 ws 的库 内存泄漏
发布于 3 年前 作者 yh4922 2035 次浏览 来自 问答

使用场景:后端获取实时的图片数据 推送给前端 一帧一帧显示 出现问题:只有一个连接数的时候 提交正常 当连接数 增加到10个左右的时候 内存开始上涨 用调试工具分析了一下 不知道怎么定位数据

这是重现代码 https://github.com/yh4922/ws_memory_demo

image.png

不知道如何下手

5 回复

你的测试代码是 ws.send 太频繁了,而且 ws 对超过 128k 的包会自动分片,导致你的 node demo 里全部堵在 ws.send 上(之前的 ws.send 处于 pending 状态,新的 ws.send 会将内容存到 bufferedRequest.next 属性上层层挂载),最后导致 socket rss 积压:

image.png

另外从 cpuprofile 也能看出来这个问题:

image.png

所以 broadcast 到所有 ws client 的频率你得做下限制

@hyj1991 感谢大佬

我修改成 客户端收到消息 回复一个确认给服务端 服务端在进行下一次推送 不知会不会好一下

另外 大佬 你的这个检测工具是啥呀

@yh4922 这是我开源的 Node.js 性能监控解决方案,详情参见:https://zhuanlan.zhihu.com/p/147576798

欢迎使用哦,有问题可以加钉钉群 35149528 咨询

@hyj1991 好的了解一下 感谢

回到顶部