压测前固定一些变量:
找一台和线上机器配置相同的机器,部署服务,进行压测之前首先要把tomcat(max-connections:1000;max-threads:1000,account-count:200)、JVM参数调整好,并且要在服务所在的机器就行压线(排除带宽、网速影响),先进行单机的压力测试。
压测的目的:
计算出N台相同配置的机器能抗住的用户请求的最大QPS是多少?
N = 用户请求的最大QPS / 接口的QPS
压测参照的性能指标有哪些?
压测的时候不断增大线程并发数,观察ReponseTime、CPU IDEL、CPU占用率、内存等指标的变化
查看进程信息命令: (top -p 进程ID)。
最大线程并发数要小于Tomcat的 (max-connections + accept-count),否则ab会报错
apr_socket_recv: Connection timed out(110)
接口响应时间 , 接口响应时间首先要一个心理预期,压测的时候接口QPS上去了,但是ReponseTime太高也是不能接收的
接口QPS = (1000ms / 接口响应时间ms ) * 线程并发数
线程并发数越大,接口响应时间越长(线程切换和调度)
800并发的情况下,进行了8000次接口请求,接口的平均响应时间是656.435ms,接口QPS 1218.70。
压测结果说明:
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测试接口的响应时间(秒):
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"