压测工具Fortio的使用

Fortio是一个快速,小巧的压测工具,带有控制台命令和UI服务。

github地址:https://github.com/fortio/fortio

安装

  1. docker安装
docker run -p 8080:8080 -p 8079:8079 fortio/fortio server & # For the server
docker run fortio/fortio load -logger-force-color http://www.google.com/ # For a test run, forcing color instead of JSON log output
  1. 从源码安装

    1. 安装go
    2. go install fortio.org/fortio@latest
    3. 执行fortio
  2. windows上安装
    https://github.com/fortio/fortio/releases/download/v1.69.5/fortio_win_1.69.5.zip 下载压缩包,解压后得到fortio.exe

执行命令fortio server,即可通过 http://localhost:8080/fortio/访问ui页面

命令行参数

几个子命令

  1. load http或者gRPC的压测命令
  2. server 启动一个http后台服务,web UI,TCP/UDP echo,代理,https重定向等功能
  3. grpcping grpc ping信息
  4. curl 单次url请求命令
  5. nc 建立单个tcp或者udp连接
  6. redirect 重定向
  7. tcp-echo tcp echo
  8. report json数据的浏览和图表化
  9. script 以交互的方式执行load

load命令的几个重要参数:

参数 描述
-qps rate 所有请求的每秒请求数
-nocatchup 当服务落后然后恢复时,不要试图通过加快速度来达到目标qps。使QPS成为一个绝对的上限,即使服务的延迟出现一些峰值,fortio也不会补偿(但也不会给目标带来超过设定QPS的压力)。
-c connections 并行同时连接的数量(以及匹配的go例程)
-t duration 测试执行时间,0表示遇到^C才停止
-n numcalls 执行指定次数的请求,默认0 表示使用-t参数
-payload str or -payload-file fname 使用POST请求,并带上指定的payload
-uniform 在线程之间及时分散调用,以实现更均匀的调用分布。与-nocatchup结合使用效果更好。
-r resolution 直方图最低桶的分辨率(默认值为0.001,即1ms),使用预期典型延迟的十分之一
-H "header: value" 添加header
-a 根据标签和时间戳自动保存JSON结果和文件名
-json filename 文件名,或者使用-在控制台输出结果(默认情况下,相对于-data-dir,如果你想让fortio报告显示它们,应该以.JSON结尾;使用-a通常是更好的选择)
-labels "l1 l2 ..." 要添加到生成的JSON中的其他配置数据/标签,默认为目标URL和hostname
-h2 客户端调用将尝试使用HTTP/2而不是HTTP/1.1
-X method 指定http method
-logger-force-color 用于彩色而非JSON输出的交互式运行
-logger-no-color 即使从终端运行,也强制JSON输出

服务url和特性

  • 一个简单的echo服务,返回任何提交的数据

例如curl -d abcdef http://localhost:8080/返回abcdef

支持的请求参数:

参数 描述
delay 延迟返回,可以时一个值或者通过逗号分隔;例如,延迟=150us:10,2ms:5,0.5s:1表示有10%的概率延迟150us,5%的概率延迟2ms,1%的概率延迟1/2秒
status 返回HTTP状态,而不是200。可以是单个值或逗号分隔的概率列表,例如,状态=404:10503:5429:1表示404状态的10%概率、503状态的5%概率和429状态的1%概率
size 要回复而不是回显输入的有效载荷的大小。也可用作概率列表。size=1024:10512:5 10%的响应将是1k,5%将是512字节的有效载荷,REST默认为回显。
close 在应答后关闭套接字,例如,close=true表示在所有请求后关闭,或close=5.3表示在大约5.3%的请求后关闭
header 要添加到回复中的header,例如,&header=Foo:Bar&header=X:Y
gzip 如果Accept-Encoding:gzip由调用者/客户端在头文件中传递;如果查询参数中有gzip=true,则所有响应都将被gzip压缩;或者如果gzip=42.7被传递,大约42.7%将
  • /debug 将以纯文本形式回显请求,以便人工调试。
  • /fortio/ UI地址
  • DNS调试 /fortio/rest/dns?name=x
posted @ 2025-05-25 21:49  Hekk丶  阅读(105)  评论(0)    收藏  举报