Siam博客

压力测试笔记

2022-11-17

websocket反代压测笔记(自用)

目标:突破nginx单机反代65535限制(最终没足够精力实现 熬夜太晚了)

不做特殊处理情况下,nginx反代肯定不超过65535个(TCP网络四元组)

  1. 2台服务器:1台server+压测2w 一台压测4w
  2. nginx 总量7w的情况下 必定崩溃 收集log(方便复盘和观察)
  3. 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 (直连)

  1. 建立链接的速度越来越慢(单台机器 可能分配随机端口会越来越慢?)
  2. 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

本文链接:
版权声明: 本文由 Siam原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权

扫描二维码,分享此文章