Skip to content

BENCHMARK : Pipy sidecar proxy SpringBoot

CaiShu edited this page Mar 30, 2022 · 3 revisions

BENCHMARK:Pipy as proxy for SpringBoot REST service In this test, we used Pipy as a sidecar proxy for the SpringBoot REST service. Both proxy and Springboot service are deployed on same node and communicate via localhost.

We chose SpringBoot REST as the test target mainly because SpringBoot is one of the major player in Java based REST development stack. SpringBoot REST services comes along with several webserver options like Tomcat and Undertow. In this test we have chosen the default configuration of Tomcat as backend web server for service.

We have used same set of load testing tools

Benchmark platform and procedure We used spring-helloworld sample as a simple Hello World service, compiled with OpenJDK11

Load Test Tools We use three testing tools:

ab (Apache Bench), ab is used to test HTTP short-lived connections, that is, one request each connection. wrk (https://github.com/wg/wrk), wrk is used to test long-lived HTTP connections, i.e. multiple request on each connection. fortio (https://github.com/fortio/fortio), fortio is used to test the latency at the specified qps. We run the test tool and the server in the same virtual machine, communicating via 127.0.0.1, mainly to avoid the influence of the physical network on the results, because the subject of our test is only the "software".

Hardware We used a virtual machine with 4 vcpus and 4G RAM.

OS We ran this test on Ubuntu21 Server ARM64 Edition

Test execution ab ab -c100 -n300000 -l URL wrk: wrk -c100 -t1 -d20 --latency URL fortio fortio load -c 100 -n 300000 -qps 0 URL Java code compilation & run root@ubuntu21-arm64:/spring-helloworld# git clone https://github.com/flomesh-io/spring-helloworld.git root@ubuntu21-arm64:/spring-helloworld# cd spring-helloworld root@ubuntu21-arm64:/spring-helloworld# mvn -DSkipTest clean package install root@ubuntu21-arm64:/spring-helloworld# java -jar target/spring-helloworld-0.0.1.jar

. ____ _ __ _ _ /\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) ) ' |
| .__|| ||| |_, | / / / / =========||==============|/=//// :: Spring Boot :: (v2.5.11)

2022-03-29 13:06:56.095 INFO 3544 --- [ main] c.e.spring.SpringHelloworldApplication : Starting SpringHelloworldApplication v0.0.1 using Java 11.0.14 on ubuntu21-arm64 with PID 3544 (/root/spring-helloworld/target/spring-helloworld-0.0.1.jar started by root in /root/spring-helloworld) 2022-03-29 13:06:56.097 INFO 3544 --- [ main] c.e.spring.SpringHelloworldApplication : No active profile set, falling back to 1 default profile: "default" 2022-03-29 13:06:56.546 INFO 3544 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-03-29 13:06:56.554 INFO 3544 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-03-29 13:06:56.555 INFO 3544 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.60] 2022-03-29 13:06:56.588 INFO 3544 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-03-29 13:06:56.588 INFO 3544 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 466 ms 2022-03-29 13:06:56.783 INFO 3544 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-03-29 13:06:56.790 INFO 3544 --- [ main] c.e.spring.SpringHelloworldApplication : Started SpringHelloworldApplication in 0.92 seconds (JVM running for 1.124) 2022-03-29 13:07:16.760 INFO 3544 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2022-03-29 13:07:16.761 INFO 3544 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2022-03-29 13:07:16.761 INFO 3544 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms Test Scope In the test, we compared the difference between the test tool accessing SpringBoot directly and through pipy proxy, and observed the QPS and Letency indicators. Pipy proxy script we used is one from Pipy tutorials tutorial/03-proxy/proxy.js.

SpringBoot service listening on port 8080 Pipy proxy listening on port 8000 and configured to forward traffic to SpringBoot service listening on port 8080. The Pipy PipyJS code is as follows:

pipy()

.listen(8000) .demuxHTTP('forward')

.pipeline('forward') .muxHTTP('connection', '')

.pipeline('connection') .connect('localhost:8080') Test Report

OS Client Mode QPS Latency P50 P90 P99 P99.9

1 ubuntu ab springboot 46102 2 ubuntu ab pipy-->springboot 50303 3 ubuntu wrk springboot 71840 1.30ms 2.04ms 4.27ms 4 ubuntu wrk pipy-->springboot 73055 1.35ms 2.09ms 2.49ms 5 ubuntu fortio springboot 62249 0.0015217 0.00293947 0.00428543 0.00777612 6 ubuntu fortio pipy-->springboot 69233 0.0014350 0.00249741 0.00296226 0.00362949 Observation From the test results, we observed: Accessing Springboot service via Pipy proxy results in higher QPS and lower latency as compared to directly accessing the SpringBoot service. In simple words, adding proxy in front of SpringBoot helps in decreasing the latency. This sounds strange, but our initial investigation reveals that Pipy handling of connection help improve this performance.

If readers are interested in further analysis, please feel free to share your findings or contact us to initiate a discussion to further discuss the internal details of Pipy proxy.

Appendix : Test Records Test Case 1 , ubuntu / ab / springboot root@ubuntu21-arm64:~# ab -c100 -n300000 -l http://127.0.0.1:8080/ This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient) Completed 30000 requests Completed 60000 requests Completed 90000 requests Completed 120000 requests Completed 150000 requests Completed 180000 requests Completed 210000 requests Completed 240000 requests Completed 270000 requests Completed 300000 requests Finished 300000 requests

Server Software: Server Hostname: 127.0.0.1 Server Port: 8080

Document Path: / Document Length: Variable

Concurrency Level: 100 Time taken for tests: 6.507 seconds Complete requests: 300000 Failed requests: 0 Total transferred: 43200000 bytes HTML transferred: 3300000 bytes Requests per second: 46102.93 [#/sec] (mean) Time per request: 2.169 [ms] (mean) Time per request: 0.022 [ms] (mean, across all concurrent requests) Transfer rate: 6483.23 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.3 1 6 Processing: 0 2 0.7 1 20 Waiting: 0 1 0.7 1 16 Total: 0 2 0.7 2 20 WARNING: The median and mean for the processing time are not within a normal deviation These results are probably not that reliable.

Percentage of the requests served within a certain time (ms) 50% 2 66% 2 75% 2 80% 2 90% 3 95% 4 98% 5 99% 5 100% 20 (longest request) Test Case 2 , ubuntu / ab / pipy-->springboot root@ubuntu21-arm64:~# ab -c100 -n300000 -l http://127.0.0.1:8000/ This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient) Completed 30000 requests Completed 60000 requests Completed 90000 requests Completed 120000 requests Completed 150000 requests Completed 180000 requests Completed 210000 requests Completed 240000 requests Completed 270000 requests Completed 300000 requests Finished 300000 requests

Server Software: Server Hostname: 127.0.0.1 Server Port: 8000

Document Path: / Document Length: Variable

Concurrency Level: 100 Time taken for tests: 5.964 seconds Complete requests: 300000 Failed requests: 0 Total transferred: 38471115 bytes HTML transferred: 2702095 bytes Requests per second: 50303.65 [#/sec] (mean) Time per request: 1.988 [ms] (mean) Time per request: 0.020 [ms] (mean, across all concurrent requests) Transfer rate: 6299.60 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.2 0 7 Processing: 1 2 0.3 2 10 Waiting: 0 2 0.3 2 6 Total: 1 2 0.3 2 10

Percentage of the requests served within a certain time (ms) 50% 2 66% 2 75% 2 80% 2 90% 2 95% 2 98% 2 99% 3 100% 10 (longest request) Test Case 3 , ubuntu / wrk / springboot root@ubuntu21-arm64:# wrk -c100 -t1 -d20 --latency http://127.0.0.1:8080/ Running 20s test @ http://127.0.0.1:8080/ 1 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.43ms 0.88ms 32.07ms 87.05% Req/Sec 72.23k 4.70k 88.32k 77.50% Latency Distribution 50% 1.30ms 75% 1.43ms 90% 2.04ms 99% 4.27ms 1437268 requests in 20.01s, 171.60MB read Requests/sec: 71840.38 Transfer/sec: 8.58MB Test Case 4 , ubuntu / wrk / pipy-->springboot root@ubuntu21-arm64:# wrk -c100 -t1 -d20 --latency http://127.0.0.1:8000/ Running 20s test @ http://127.0.0.1:8000/ 1 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.36ms 559.33us 10.29ms 62.92% Req/Sec 73.47k 1.36k 75.67k 91.00% Latency Distribution 50% 1.35ms 75% 1.79ms 90% 2.09ms 99% 2.49ms 1461547 requests in 20.01s, 147.77MB read Requests/sec: 73055.35 Transfer/sec: 7.39MB Test Case 5 , ubuntu / fortio / springboot root@ubuntu21-arm64:~# fortio load -c 100 -n 300000 -qps 0 http://127.0.0.1:8080/ Fortio 1.22.0 running at 0 queries per second, 4->4 procs, for 300000 calls: http://127.0.0.1:8080/ 14:37:01 I httprunner.go:87> Starting http test for http://127.0.0.1:8080/ with 100 threads at -1.0 qps and parallel warmup Starting at max qps with 100 thread(s) [gomax 4] for exactly 300000 calls (3000 per thread + 0) 14:37:01 I http_client.go:778> Closing dead socket &{{0x4000077800}} (err EOF at first read) ...... Ended after 4.819328656s : 300000 calls. qps=62249 Aggregated Function Time : count 300000 avg 0.0015938249 +/- 0.0009048 min 1.8123e-05 max 0.030373813 sum 478.147481

range, mid point, percentile, count

= 1.8123e-05 <= 0.001 , 0.000509062 , 20.86, 62582 0.001 <= 0.002 , 0.0015 , 76.72, 167563 0.002 <= 0.003 , 0.0025 , 90.86, 42423 0.003 <= 0.004 , 0.0035 , 98.76, 23705 0.004 <= 0.005 , 0.0045 , 99.61, 2547 0.005 <= 0.006 , 0.0055 , 99.80, 583 0.006 <= 0.007 , 0.0065 , 99.87, 193 0.007 <= 0.008 , 0.0075 , 99.91, 134 0.008 <= 0.009 , 0.0085 , 99.94, 78 0.009 <= 0.01 , 0.0095 , 99.96, 72 0.01 <= 0.011 , 0.0105 , 99.97, 33 0.011 <= 0.012 , 0.0115 , 99.98, 23 0.012 <= 0.014 , 0.013 , 99.99, 21 0.014 <= 0.016 , 0.015 , 99.99, 19 0.016 <= 0.018 , 0.017 , 99.99, 6 0.018 <= 0.02 , 0.019 , 100.00, 8 0.02 <= 0.025 , 0.0225 , 100.00, 5 0.025 <= 0.03 , 0.0275 , 100.00, 4 0.03 <= 0.0303738 , 0.0301869 , 100.00, 1

target 50% 0.0015217

target 75% 0.0019693

target 90% 0.00293947

target 99% 0.00428543

target 99.9% 0.00777612

Sockets used: 3000 (for perfect keepalive, would be 100) Uniform: false, Jitter: false Code 200 : 300000 (100.0 %) Response Header Sizes : count 300000 avg 114.19 +/- 1.89 min 114 max 133 sum 34257000 Response Body/Total Sizes : count 300000 avg 125.19 +/- 1.89 min 125 max 144 sum 37557000 All done 300000 calls (plus 0 warmup) 1.594 ms avg, 62249.3 qps Test Case 6 , ubuntu / fortio / pipy-->springboot root@ubuntu21-arm64:~# fortio load -c 100 -n 300000 -qps 0 http://127.0.0.1:8000/ Fortio 1.22.0 running at 0 queries per second, 4->4 procs, for 300000 calls: http://127.0.0.1:8000/ 14:42:36 I httprunner.go:87> Starting http test for http://127.0.0.1:8000/ with 100 threads at -1.0 qps and parallel warmup Starting at max qps with 100 thread(s) [gomax 4] for exactly 300000 calls (3000 per thread + 0) 14:42:40 I periodic.go:693> T046 ended after 4.310576876s : 3000 calls. qps=695.9625326955891 14:42:40 I periodic.go:693> T007 ended after 4.314851111s : 3000 calls. qps=695.2731213255529 14:42:40 I periodic.go:693> T060 ended after 4.317850758s : 3000 calls. qps=694.7901092787145 14:42:40 I periodic.go:693> T093 ended after 4.317971292s : 3000 calls. qps=694.7707145617586 14:42:40 I periodic.go:693> T087 ended after 4.317992249s : 3000 calls. qps=694.7673425524948 14:42:40 I periodic.go:693> T075 ended after 4.318018748s : 3000 calls. qps=694.7630788748951 14:42:40 I periodic.go:693> T083 ended after 4.31811845s : 3000 calls. qps=694.7470373352079 14:42:40 I periodic.go:693> T014 ended after 4.31929321s : 3000 calls. qps=694.5580802559131 14:42:40 I periodic.go:693> T091 ended after 4.31988034s : 3000 calls. qps=694.4636804453709 14:42:40 I periodic.go:693> T082 ended after 4.320237235s : 3000 calls. qps=694.4063107682557 14:42:40 I periodic.go:693> T020 ended after 4.320752161s : 3000 calls. qps=694.323554838118 14:42:40 I periodic.go:693> T086 ended after 4.320884486s : 3000 calls. qps=694.302291514673 14:42:40 I periodic.go:693> T024 ended after 4.320877779s : 3000 calls. qps=694.3033692321433 14:42:40 I periodic.go:693> T090 ended after 4.320903319s : 3000 calls. qps=694.2992653430392 14:42:40 I periodic.go:693> T010 ended after 4.320916901s : 3000 calls. qps=694.2970829422113 14:42:40 I periodic.go:693> T040 ended after 4.320953899s : 3000 calls. qps=694.2911380503947 14:42:40 I periodic.go:693> T059 ended after 4.320969398s : 3000 calls. qps=694.288647679055 14:42:40 I periodic.go:693> T032 ended after 4.321581402s : 3000 calls. qps=694.1903254701207 14:42:40 I periodic.go:693> T088 ended after 4.321863759s : 3000 calls. qps=694.1449724676525 14:42:40 I periodic.go:693> T076 ended after 4.322039457s : 3000 calls. qps=694.1167543348506 14:42:40 I periodic.go:693> T030 ended after 4.322193905s : 3000 calls. qps=694.0919509718294 14:42:40 I periodic.go:693> T069 ended after 4.32220003s : 3000 calls. qps=694.0909673724656 14:42:40 I periodic.go:693> T015 ended after 4.322411392s : 3000 calls. qps=694.0570269531623 14:42:40 I periodic.go:693> T035 ended after 4.322457472s : 3000 calls. qps=694.0496278872354 14:42:40 I periodic.go:693> T063 ended after 4.322589964s : 3000 calls. qps=694.0283545247227 14:42:40 I periodic.go:693> T051 ended after 4.322850198s : 3000 calls. qps=693.9865742717554 14:42:40 I periodic.go:693> T055 ended after 4.322871363s : 3000 calls. qps=693.9831764778794 14:42:40 I periodic.go:693> T047 ended after 4.322925277s : 3000 calls. qps=693.9745213643672 14:42:40 I periodic.go:693> T018 ended after 4.322935984s : 3000 calls. qps=693.9728025359535 14:42:40 I periodic.go:693> T008 ended after 4.323130097s : 3000 calls. qps=693.9416424413934 14:42:40 I periodic.go:693> T070 ended after 4.323425996s : 3000 calls. qps=693.8941484775214 14:42:40 I periodic.go:693> T022 ended after 4.323690188s : 3000 calls. qps=693.851749213258 14:42:40 I periodic.go:693> T002 ended after 4.323710645s : 3000 calls. qps=693.8484663559163 14:42:40 I periodic.go:693> T038 ended after 4.323721769s : 3000 calls. qps=693.8466812340348 14:42:40 I periodic.go:693> T094 ended after 4.323737143s : 3000 calls. qps=693.8442141092943 14:42:40 I periodic.go:693> T036 ended after 4.323741476s : 3000 calls. qps=693.8435187793359 14:42:40 I periodic.go:693> T009 ended after 4.323770308s : 3000 calls. qps=693.8388920543001 14:42:40 I periodic.go:693> T013 ended after 4.323787057s : 3000 calls. qps=693.836204339237 14:42:40 I periodic.go:693> T019 ended after 4.323789723s : 3000 calls. qps=693.8357765276552 14:42:40 I periodic.go:693> T061 ended after 4.323800472s : 3000 calls. qps=693.8340516467754 14:42:40 I periodic.go:693> T041 ended after 4.324439683s : 3000 calls. qps=693.7314935374022 14:42:40 I periodic.go:693> T054 ended after 4.324717207s : 3000 calls. qps=693.6869756811361 14:42:40 I periodic.go:693> T048 ended after 4.3255042s : 3000 calls. qps=693.5607645462464 14:42:40 I periodic.go:693> T043 ended after 4.325547364s : 3000 calls. qps=693.5538436055373 14:42:40 I periodic.go:693> T052 ended after 4.325635567s : 3000 calls. qps=693.5397015150352 14:42:40 I periodic.go:693> T000 ended after 4.325655399s : 3000 calls. qps=693.5365218166792 14:42:40 I periodic.go:693> T062 ended after 4.325821597s : 3000 calls. qps=693.5098761540535 14:42:40 I periodic.go:693> T096 ended after 4.325888301s : 3000 calls. qps=693.4991824237582 14:42:40 I periodic.go:693> T037 ended after 4.326088164s : 3000 calls. qps=693.4671431259347 14:42:40 I periodic.go:693> T078 ended after 4.326587591s : 3000 calls. qps=693.3870947719824 14:42:40 I periodic.go:693> T073 ended after 4.326597632s : 3000 calls. qps=693.3854855861022 14:42:40 I periodic.go:693> T016 ended after 4.326602882s : 3000 calls. qps=693.3846442161179 14:42:40 I periodic.go:693> T001 ended after 4.326860741s : 3000 calls. qps=693.3433220008501 14:42:40 I periodic.go:693> T068 ended after 4.327202095s : 3000 calls. qps=693.2886271862466 14:42:40 I periodic.go:693> T028 ended after 4.327446955s : 3000 calls. qps=693.249398824809 14:42:40 I periodic.go:693> T005 ended after 4.327553323s : 3000 calls. qps=693.232359276928 14:42:40 I periodic.go:693> T023 ended after 4.327567364s : 3000 calls. qps=693.230110051269 14:42:40 I periodic.go:693> T081 ended after 4.32757328s : 3000 calls. qps=693.2291623724971 14:42:40 I periodic.go:693> T067 ended after 4.327697564s : 3000 calls. qps=693.2092540281773 14:42:40 I periodic.go:693> T033 ended after 4.327912509s : 3000 calls. qps=693.1748259146706 14:42:40 I periodic.go:693> T072 ended after 4.328331775s : 3000 calls. qps=693.1076811920224 14:42:40 I periodic.go:693> T044 ended after 4.328359148s : 3000 calls. qps=693.1032979059066 14:42:40 I periodic.go:693> T079 ended after 4.328365231s : 3000 calls. qps=693.102323832062 14:42:40 I periodic.go:693> T017 ended after 4.328374105s : 3000 calls. qps=693.1009028388963 14:42:40 I periodic.go:693> T031 ended after 4.328385105s : 3000 calls. qps=693.0991414175472 14:42:40 I periodic.go:693> T039 ended after 4.328781122s : 3000 calls. qps=693.035733489322 14:42:40 I periodic.go:693> T025 ended after 4.328960736s : 3000 calls. qps=693.0069785691861 14:42:40 I periodic.go:693> T066 ended after 4.329157474s : 3000 calls. qps=692.9754849569143 14:42:40 I periodic.go:693> T065 ended after 4.329286507s : 3000 calls. qps=692.9548310441724 14:42:40 I periodic.go:693> T098 ended after 4.329384668s : 3000 calls. qps=692.93911954141 14:42:40 I periodic.go:693> T092 ended after 4.329395459s : 3000 calls. qps=692.9373923935647 14:42:40 I periodic.go:693> T064 ended after 4.329464788s : 3000 calls. qps=692.9262961821784 14:42:40 I periodic.go:693> T045 ended after 4.329487995s : 3000 calls. qps=692.9225819460898 14:42:40 I periodic.go:693> T084 ended after 4.329644027s : 3000 calls. qps=692.8976103559011 14:42:40 I periodic.go:693> T050 ended after 4.329693274s : 3000 calls. qps=692.8897291674523 14:42:40 I periodic.go:693> T029 ended after 4.330081833s : 3000 calls. qps=692.8275528505467 14:42:40 I periodic.go:693> T003 ended after 4.330095582s : 3000 calls. qps=692.8253529716194 14:42:40 I periodic.go:693> T099 ended after 4.330178785s : 3000 calls. qps=692.8120405541176 14:42:40 I periodic.go:693> T080 ended after 4.330258822s : 3000 calls. qps=692.7992351769868 14:42:40 I periodic.go:693> T074 ended after 4.330270488s : 3000 calls. qps=692.7973687356409 14:42:40 I periodic.go:693> T097 ended after 4.330302153s : 3000 calls. qps=692.7923027083972 14:42:40 I periodic.go:693> T057 ended after 4.330459434s : 3000 calls. qps=692.7671406978016 14:42:40 I periodic.go:693> T027 ended after 4.330482183s : 3000 calls. qps=692.7635014357014 14:42:40 I periodic.go:693> T056 ended after 4.33050414s : 3000 calls. qps=692.7599889097438 14:42:40 I periodic.go:693> T077 ended after 4.331027774s : 3000 calls. qps=692.6762321889465 14:42:40 I periodic.go:693> T011 ended after 4.331040482s : 3000 calls. qps=692.6741997605739 14:42:40 I periodic.go:693> T004 ended after 4.33104344s : 3000 calls. qps=692.6737266805155 14:42:40 I periodic.go:693> T095 ended after 4.331050023s : 3000 calls. qps=692.6726738478033 14:42:40 I periodic.go:693> T034 ended after 4.331051564s : 3000 calls. qps=692.6724273929702 14:42:40 I periodic.go:693> T042 ended after 4.331054398s : 3000 calls. qps=692.6719741468369 14:42:40 I periodic.go:693> T012 ended after 4.331468664s : 3000 calls. qps=692.6057263056769 14:42:40 I periodic.go:693> T089 ended after 4.331494329s : 3000 calls. qps=692.6016224734622 14:42:40 I periodic.go:693> T058 ended after 4.331511953s : 3000 calls. qps=692.5988044249084 14:42:40 I periodic.go:693> T049 ended after 4.331471288s : 3000 calls. qps=692.6053067259763 14:42:40 I periodic.go:693> T053 ended after 4.332068585s : 3000 calls. qps=692.5098116838794 14:42:40 I periodic.go:693> T085 ended after 4.332098416s : 3000 calls. qps=692.5050430340916 14:42:40 I periodic.go:693> T071 ended after 4.3322282s : 3000 calls. qps=692.4842971106647 14:42:40 I periodic.go:693> T006 ended after 4.33224749s : 3000 calls. qps=692.4812137175477 14:42:40 I periodic.go:693> T026 ended after 4.332263948s : 3000 calls. qps=692.4785830246925 14:42:40 I periodic.go:693> T021 ended after 4.332934073s : 3000 calls. qps=692.3714853392371 Ended after 4.333138977s : 300000 calls. qps=69234 Aggregated Function Time : count 300000 avg 0.001441618 +/- 0.0005929 min 0.000118784 max 0.006255693 sum 432.485388

range, mid point, percentile, count

= 0.000118784 <= 0.001 , 0.000559392 , 26.61, 79839 0.001 <= 0.002 , 0.0015 , 80.37, 161270 0.002 <= 0.003 , 0.0025 , 99.73, 58083 0.003 <= 0.004 , 0.0035 , 100.00, 807 0.006 <= 0.00625569 , 0.00612785 , 100.00, 1

target 50% 0.00143505

target 75% 0.00190011

target 90% 0.00249741

target 99% 0.00296226

target 99.9% 0.00362949

Sockets used: 100 (for perfect keepalive, would be 100) Uniform: false, Jitter: false Code 200 : 300000 (100.0 %) Response Header Sizes : count 300000 avg 100.56341 +/- 38 min 62 max 138 sum 30169024 Response Body/Total Sizes : count 300000 avg 106.14496 +/- 43.5 min 62 max 149 sum 31843488 All done 300000 calls (plus 0 warmup) 1.442 ms avg, 69233.9 qps

Clone this wiki locally