找一臺和線上機器配置相同的機器,部署服務,進行壓測以前首先要把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"