项目简介
本项目是基于Go语言开发的多功能压测工具,能对HTTP、WebSocket、gRPC等接口进行压测,支持http1.1和2.0长连接,还可简单扩展以支持私有协议。项目包含详细压测知识介绍,对比常见压测工具,并提供单台机器100W连接的压测实战案例。
项目的主要特性和功能
- 多种协议支持:可对HTTP、WebSocket、gRPC接口压测,支持http1.1和2.0长连接,能扩展支持私有协议。
- 高效资源利用:用每个用户一个协程的方式模拟,充分利用CPU资源。
- 丰富参数配置:支持并发数、请求次数、压测地址、调试模式、是否开启http2.0和长连接等参数配置。
- 实时结果展示:压测时终端每秒输出结果,完成后输出完整结果,含耗时、并发数、成功数、失败数、QPS等指标。
- 多种使用方式:可直接用可执行文件、curl文件读取内容或clone源码运行。
- 对比与选择参考:介绍并比较常见压测工具,助用户选择合适工具。
- 实战案例:提供单台机器对HTTP短连接QPS 1W+及100W长连接的压测实战。
安装使用步骤
准备工作
假设已下载项目源码文件且安装Go环境。若使用常见压测工具,需提前安装:
- ab:在linux环境用sudo yum -y install httpd
安装。
- Locust:用pip3 install locust
安装,运行Locust分布在多个进程/机器库用pip3 install pyzmq
,进行webSocket压测用pip3 install websocket-client
。
- JMeter:访问https://jmeter-plugins.org/install/Install/ 下载解压后使用。
使用本项目压测工具
- 配置参数:
-c
:并发数,默认1。-n
:每个并发执行请求次数,默认1,总请求次数 = 并发数 * 每个并发执行请求次数。-u
:压测地址。-d
:调试模式,默认"false"。-http2
:是否开启http2.0。-k
:是否开启长连接。-m
:单个host最大连接数,默认1。-H
:自定义头信息传递给服务器,如-H 'Content-Type: application/json'
。-data
:HTTP POST方式传送数据。-v
:验证方法,http支持:statusCode、json,webSocket支持:json。-p
:curl文件路径。
- 执行压测:以mac系统为例,执行以下命令:
shell ./go-stress-testing-mac -c 1 -n 100 -u https://www.baidu.com/
- 查看结果:执行命令后,终端每秒输出结果,压测完成后输出完整结果及指标解释。
使用curl文件压测
- 生成curl文件:用chrome浏览器开发者模式(F12)或postman生成curl命令。
- 保存文件:将内容粘贴到项目目录下的
curl/baidu.curl.txt
文件中。 - 执行压测:使用以下命令:
shell go run main.go -c 1 -n 1 -p curl/baidu.curl.txt
单台机器100W连接压测实战步骤
- 服务器准备:准备16台压测服务器(CPU: 2核,内存: 8G,硬盘: 20G,系统: CentOS 7.6)和1台被压测服务(CPU: 4核,内存: 32G,硬盘: 20G SSD,系统: CentOS 7.6)。
-
内核优化:
- 修改程序最大打开文件数:
shell ulimit -n 1040000
若centOS 7.6设置不生效,手动修改配置文件vim /etc/security/limits.conf
,添加: ``` root soft nofile 1040000 root hard nofile 1040000 root soft nproc 1040000 root hard nproc 1040000
- 修改程序最大打开文件数:
-
soft nofile 1040000
- hard nofile 1040000
- soft nproc 1040000
- hard nproc 1040000
root soft core unlimited root hard core unlimited
- soft core unlimited
- hard core unlimited
`` 注意
/proc/sys/fs/file-max的值不能小于limits中设置的值,修改后重启服务器,用
ulimit -n`查看配置是否生效。 - 客户端配置:
编辑
vim /etc/sysctl.conf
,在末尾添加: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
执行sysctl -p
使配置生效。 - 开始压测:
- 在被压测服务器上启动Server服务(gowebsocket)。
- 查看被压测服务器的内网端口。
- 登录16台压测服务器,启动压测:
shell ./go_stress_testing_linux -c 62500 -n 1 -u ws://192.168.0.74:443/acc
- 监控与查看结果:
- 通过gowebsocket服务器的http接口,实时查询连接数和项目启动的协程数。
- 使用
ps
查看进程内存、cup使用情况,iostat
查看系统IO情况,nload
查看网络流量情况,/proc/pid/status
查看进程状态。 - 压测完成后,查看连接数是否达到100W,观察系统是否正常。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】