go websocket server 开启压缩内存占用高的问题

go websocket server 开启压缩内存占用高的问题,第1张

go websocket server 开启压缩内存占用高的问题,第2张

很多普通开发者, 甚至库的作者, 没有意识到 flate 算法内存占用过高的问题, 一个压缩器, 占用内存超过了 640KB !!!

package main

import (
	"compress/flate"
	"unsafe"
)

func main() {
	writer, _ := flate.NewWriter(nil, flate.BestSpeed)
	println(unsafe.Sizeof(*writer))
}

// output: 656648

我测试了一下三个 websocket package, 10000 连接, 开启压缩, 10s 广播一次, 结果如下

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  18563 caster    20   0 1340732 225504   4000 S   0.0   5.6  16:15.86 gws-linux-amd64
  18542 caster    20   0 1469756 351172   4912 S   0.0   8.8  25:17.99 gorilla-linux-a
  30294 caster    20   0 4791548   1.7g    880 S   0.0  44.6   0:07.33 nhooyr-linux-am
  • github.com/lxzan/gws
  • github.com/gorilla/websocket
  • github.com/nhooyr/websocket

nhooyr降低到开 5000 连接才能正常测试

----------------------- 以下是精选回复-----------------------

答:求问这一万个连接是怎么测试的?虚拟机? docker ?什么工具?
答:websocket server 客户端直连?一般不是还有一个 http/https 网关吗,压缩放在网关上应该会有所不同?
或者 caddy 这种,给 http 开压缩也会有类似问题吗
答:这个应该算是一个老问题了 https://github.com/golang/go/issues/32371

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » go websocket server 开启压缩内存占用高的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情