最近在压测服务的各种接口,由于只是为了估算扩容所需要的资源,不需要太精确的压测数据,所以在网上不断扒拉尝试了很多种压测工具。
  发现能压测https的工具还是挺少的,众所周知的ab没法支持太高的并发,jmeter又太笨重,所以最后选择了go开发的hey工具。

源码地址:https://github.com/rakyll/hey

  不想自己编译的可以直接下载预编译的二进制文件,然后给个执行权限就能使用,下载地址:

Linux 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
Mac 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_darwin_amd64
Windows 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_windows_amd64

举个例子: 请求数1000000,并发30000压测

hey -n 100000 -c 30000 -m POST  -H "Content-Type: application/json"  -H "Authorization:qazqazqaz" -d "{\"name\":\"my\",\"id\":\"002\"} https://test.com:9090/api

压测结果:

image-1691498682299

image-1691498690398

注意:DNS+dialup: Time taken to establish the TCP connection (in seconds),它包括了建立tcp连接的时间
 
常用的参数:更多的参数可以到源码页面上看

-n : 总请求数
-c : 并发数
-q : QPS速率
-z : 压测持续的时间,如20s ,2m
-m : HTTP的方法,GET、POST、PUT、DELETE、HEAD
-t : 请求的超时时间,默认是20秒
-H : 设置请求头,可以多次-H设置多个头
-d : 请求体
-cpu : 使用的CPU核数

  
  要想达到单机5万的并发,还需要放开linux的端口限制和文件打开数的限制
  
问题:
  在测试中发现,请求数为100万时,最后成功的请求数和失败的请求数加起来只有99万,不知道是什么原因,有哪位大神知道的可以教教我!