go websocket server 开启压缩后内存占用特别高

很多普通开发者,甚至库的作者,没有意识到 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
本作品采用《CC 协议》,转载必须注明作者和本文链接