首页 > Web开发 > 详细

websocket长链接的保持与通道和goroutine的坑

时间:2021-05-24 23:01:20      阅读:28      评论:0      收藏:0      [点我收藏+]

工作中遇到用websocket来和用户通信的,架构上是nginx+ws的方式。

写了个简单的脚本(启动1w个ws链接)测试一下服务器的用户承载能力,以10万的ws连接为目标,散列到5分钟内,创建websocket连接,10分钟后停掉测试脚本

10w的ws连接请求 全部成功

nginx与ws服务之间的连接数峰值在2w+,(相应的nginx和脚本直接的也差不多在2w+)

脚本不停,

  10w的连接数,脚本内存占用为300多M

  ws服务端内存占用为2.3g,这个占用,原则上说,脚本停了以后会慢慢回落下去,但是实际上并没有任何回落,或者说,正常的程序,内存占用不会这么暴力增长

    然后加入了pprof,排查问题,发现goroutine一直在涨,没有一点回落,于是目的明确,goroutine泄漏,点击goroutine进去,发现频繁创建的就那么一个goroutine

  最终发现是通道没有关闭,一个轮询读,一个在轮询写,所以goroutine一直没有关闭

 

修改完成后,再跑脚本,内存占用只有100+M了,正常了

 

websocket长链接的保持与通道和goroutine的坑

原文:https://www.cnblogs.com/life-tea/p/14805424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!