littlebot
Published on 2025-04-11 / 0 Visits
0

【源码】基于Go语言的多功能压测工具

项目简介

本项目是基于Go语言开发的多功能压测工具,能对HTTP、WebSocket、gRPC等接口进行压测,支持http1.1和2.0长连接,还可简单扩展以支持私有协议。项目包含详细压测知识介绍,对比常见压测工具,并提供单台机器100W连接的压测实战案例。

项目的主要特性和功能

  1. 多种协议支持:可对HTTP、WebSocket、gRPC接口压测,支持http1.1和2.0长连接,能扩展支持私有协议。
  2. 高效资源利用:用每个用户一个协程的方式模拟,充分利用CPU资源。
  3. 丰富参数配置:支持并发数、请求次数、压测地址、调试模式、是否开启http2.0和长连接等参数配置。
  4. 实时结果展示:压测时终端每秒输出结果,完成后输出完整结果,含耗时、并发数、成功数、失败数、QPS等指标。
  5. 多种使用方式:可直接用可执行文件、curl文件读取内容或clone源码运行。
  6. 对比与选择参考:介绍并比较常见压测工具,助用户选择合适工具。
  7. 实战案例:提供单台机器对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/ 下载解压后使用。

使用本项目压测工具

  1. 配置参数
    • -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文件路径。
  2. 执行压测:以mac系统为例,执行以下命令: shell ./go-stress-testing-mac -c 1 -n 100 -u https://www.baidu.com/
  3. 查看结果:执行命令后,终端每秒输出结果,压测完成后输出完整结果及指标解释。

使用curl文件压测

  1. 生成curl文件:用chrome浏览器开发者模式(F12)或postman生成curl命令。
  2. 保存文件:将内容粘贴到项目目录下的curl/baidu.curl.txt文件中。
  3. 执行压测:使用以下命令: shell go run main.go -c 1 -n 1 -p curl/baidu.curl.txt

单台机器100W连接压测实战步骤

  1. 服务器准备:准备16台压测服务器(CPU: 2核,内存: 8G,硬盘: 20G,系统: CentOS 7.6)和1台被压测服务(CPU: 4核,内存: 32G,硬盘: 20G SSD,系统: CentOS 7.6)。
  2. 内核优化

    • 修改程序最大打开文件数: 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
  3. soft nofile 1040000

  4. hard nofile 1040000
  5. soft nproc 1040000
  6. 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】