CNode

node js 调用 ws 的库 内存泄漏

问答
Yyh4922发布于5 年前最后回复5 年前5 回复3044 浏览0 收藏

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

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

image.png

不知道如何下手

查看回复

回复 (5)

H
hyj1991#1·5 年前

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

image.png

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

image.png

H
hyj1991#2·5 年前

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

Y
yh4922#3·5 年前
引用 hyj1991所以 broadcast 到所有 ws client 的频率你得做下限制

@hyj1991 感谢大佬

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

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

参与回复
登录后即可参与回复。登录