背景
某电商平台的 API 网关服务(基于 Go 语言开发)负责接收用户端的 HTTP 请求,并转发到后端微服务。运维团队在做容量规划时,遇到了一个疑问:当网关承受 10000 QPS(每秒处理 1 万次请求) 时,究竟会占用多少内存?
结论
说法1:
tcp连接数上限其实受限于机器的内存,以8G内存为例,假设一个tcp连接需要占用的最小内存是8k(发送接收缓存各4k,当然还要考虑socket描述符),那么最大连接数为:810241024/8=1048576个,即约100万个tcp长连接。不过这只是理论数值,并未考虑实际业务。
说法2:
创建 10000 个 TCP socket 会使用 31552 KB 内存(通过比较 /proc/meminfo 得出),即每个 TCP socket 占用 3.155 KB
在实际测试预估值:1w qps 用不到2.5G内存,其中还包括一些简单的业务处理申请的变量