websocket反代压测笔记(自用)
目标:突破nginx单机反代65535限制(最终没足够精力实现 熬夜太晚了)
不做特殊处理情况下,nginx反代肯定不超过65535个(TCP网络四元组)
- 2台服务器:1台server+压测2w 一台压测4w
- nginx 总量7w的情况下 必定崩溃 收集log(方便复盘和观察)
- nginx处理虚拟IP
server架构
client -> nginx -> php swoole websocket
压测工具
go-stress-testing 直接使用(github)
https://github.com/link1st/go-stress-testing
日志收集
websocket.Dial ws://172.16.16.10: dial tcp 172.16.16.10:80: socket: too many open files
优化内核
websocket.Dial ws://172.16.16.10: read tcp 172.16.16.8:33482->172.16.16.10:80: read: connection reset by peer
https://www.cnblogs.com/xzkzzz/p/16005034.html
websocket.Dial ws://172.16.16.10:9501: dial tcp 172.16.16.10:9501: connect: cannot assign requested address
优化内核https://blog.csdn.net/weixin_43525993/article/details/123198990
net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_mem = 786432 2097152 3145728 net.ipv4.tcp_rmem = 4096 4096 16777216 net.ipv4.tcp_wmem = 4096 4096 16777216 net.ipv4.ip_forward=1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1
sysctl -p
测试数据
A机器-> 5w websocket连接 B机器 server (直连)
- 建立链接的速度越来越慢(单台机器 可能分配随机端口会越来越慢?)
- 9万链接 纯swoole server simple demo 资源耗费: CPU一直稳定 50%以下 内存2.8G(本机也有压测客户端 所以可能纯server在2G左右)
内网出包量13176个/秒
CPU MAX 65.85%
nginx 固定在2044个链接 上不去
# nginx keealive配置 http { # 客户端连接的超时时间, 为 0 时禁用长连接, keepalive_timeout 120s; # 在一个长连接上可以服务的最大请求数目, 当达到最大请求数目且所有已有请求结束后, 连接被关闭, 默认为 100, 即每个连接的最大请求数 keepalive_request 10000; } # nginx 单进程数量限制 worker_connections
其他一些参考文章(我自己也没有看完 而且有知识重复 只是收集)
-在 nginx 这里采用多个内网 IP,这些 IP 使用 proxy_bind 来指定。参考 https://nginx.org/r/proxy_bind
- nginx 用 proxy_bind 这种方法最多能撑多少量级的长连接?如何克服 nginx中的临时端口耗尽问题?
https://www.nginx.com/blog/overcoming-ephemeral-port-exhaustion-nginx-plus
- nginx使用proxy_bind负载tcp socket,解决代理端口耗尽https://www.sundayle.com/nginx-proxy-65535-port
- 高并发中负载均衡器临时端口耗尽问题https://www.maideliang.com/index.php/archives/48
- 一台Linux服务器最多能支撑多少个TCP连接?https://blog.csdn.net/sqlquan/article/details/111561959
- nginx 性能调优
Tuning NGINX for Performance
http://nginx.com/blog/tuning-nginx
https://www.cnblogs.com/clnchanpin/p/7026413.html
Ideal way to overcome port exhaustion/unix socket limit?
https://studygolang.com/resources/5916?fr=sidebar
使用 HAProxy 负载均衡300k并发tcp连接
https://www.sundayle.com/haproxy-optimization
Use HAProxy to load balance 300k concurrent tcp socket connections: Port Exhaustion, Keep-alive and others
https://www.linangran.com/?p=547
Nginx作为反向代理服务器是否可以突破单机65535TCP连接的限制?如果是,是如何实现的?
https://www.zhihu.com/question/306520501
Nginx 高级篇:单机并发 1 万 10 万次请求解决和优化方案
https://learnku.com/articles/42203
nginx 并发数问题思考:worker_connections,worker_processes与 max clients
https://blog.51cto.com/liuqunying/1420556
nginx tcp负载突破端口数量限制 proxy_bind split_client
https://www.codenong.com/cs105164127/
nginx代理websocket连接上限
https://blog.csdn.net/Wjhsmart/article/details/107385614