找一台和线上机器配置相同的机器,部署服务,进行压测以前首先要把tomcat(max-connections:1000;max-threads:1000,account-count:200)、JVM参数调整好,而且要在服务所在的机器就行压线(排除带宽、网速影响),先进行单机的压力测试。api
计算出N台相同配置的机器能抗住的用户请求的最大QPS是多少?tomcat
N = 用户请求的最大QPS / 接口的QPS并发
压测的时候不断增大线程并发数,观察ReponseTime、CPU IDEL、CPU占用率、内存等指标的变化app
查看进程信息命令: (top -p 进程ID)。 curl
最大线程并发数要小于Tomcat的 (max-connections + accept-count),不然ab会报错socket
apr_socket_recv: Connection timed out(110)
接口响应时间 , 接口响应时间首先要一个心理预期,压测的时候接口QPS上去了,可是ReponseTime过高也是不能接收的性能
接口QPS = (1000ms / 接口响应时间ms ) * 线程并发数测试
线程并发数越大,接口响应时间越长(线程切换和调度)url
800并发的状况下,进行了8000次接口请求,接口的平均响应时间是656.435ms,接口QPS 1218.70。spa
压测结果说明:
Requests per second : 1218.70,这个变量其实就是接口的QPS
Time per Request :656.435ms 在进行压测的过程当中接口的平均响应时间。
(Requests per second ) = (1000ms / Time per Request ) * (Currency Level)
ab -n 8000 -c 800 -p aaa.bin -T application/octet-stream 'http://10.9.146.211:9386/horadric/api/logcollection/event/add'
随着并发数的增长,QPS呈现的是一个拱形的曲线,峰值就是咱们要的接口的最大QPS。
响应时间与并发数正相关.(图标中展现的是 响应时间*10 ms)
curl -o /dev/null -s -w %{time_namelookup}::%{time_connect}::%{time_starttransfer}::%{time_total}::%{speed_download}"\n" -d "param1=value1¶m2=value2" "http://127.0.0.1:8081/detail"
curl -o /dev/null -s -w %{time_total}::"\n" "http://127.0.0.1:8081/detail"