Skip to content

Instantly share code, notes, and snippets.

@danehans
Last active March 21, 2018 18:05
Show Gist options
  • Save danehans/0bd7e1ad50c8ce32bbd48a160609d8c4 to your computer and use it in GitHub Desktop.
Save danehans/0bd7e1ad50c8ce32bbd48a160609d8c4 to your computer and use it in GitHub Desktop.
Fortio Training 3_20_2018

Fortio Introduction

Fortio is a load testing tool that consists of:

  • A server
  • A client
  • A GUI
  • A load testing library

Fortio runs a specified number of queries per second (qps), records a histogram of execution time and calculates percentiles. It can run for a set duration, for a fixed number of calls, or until interrupted.

Fortio Server

The server command starts the grpc, http, and https redirector servers:

$ fortio server &
Fortio 0.8.0 grpc 'ping' server listening on [::]:8079
Fortio 0.8.0 https redirector server listening on [::]:8081
Fortio 0.8.0 echo server listening on [::]:8080
UI started - visit:
http://localhost:8080/fortio/   (or any host/ip reachable on this server)
21:45:23 I fortio_main.go:195> All fortio 0.8.0 buildinfo go1.10 servers started!

Docker example (with debug logging):

$ docker run --name fortio_server -p 8080:8080 -p 8079:8079 istio/fortio server -loglevel debug &

The /fortio http endpoint serves the GUI and can be viewed from http://localhost:8080/fortio/. The http echo server echos back data that it receives and is served from the /echo endpoint. For example:

$ curl -d foo http://localhost:8080/echo/
foo

The 0.8 release added a TCP Proxy server. The server listens on a specified address:port and proxies TCP traffic to a remote address:port using the -P flag:

# Remove the running fortio_server Docker container:
$ docker rm -f fortio_server

# Start Fortio server using -P to enable the TCP proxy.
# Note: Change "35.230.102.204:80" to your destination address:port
$ docker run --name fortio_server -p 8080:8080 -p 8079:8079 istio/fortio server -loglevel debug -P "$FORTIO_IP:8089 35.230.102.204:80" &
[1] 65810
$ 15:59:09 I logger.go:97> Log level is now 0 Debug (was 2 Info)
15:59:09 V stats.go:517> Will use [50 75 90 99 99.9] for percentiles
Fortio 0.8.1-pre grpc 'ping' server listening on [::]:8079
15:59:09 V uihandler.go:96> Using resources directory set at link time: /usr/local/lib/fortio
Fortio 0.8.1-pre https redirector server listening on [::]:8081
Fortio 0.8.1-pre echo server listening on [::]:8080
UI started - visit:
http://localhost:8080/fortio/   (or any host/ip reachable on this server)
Fortio 0.8.1-pre proxy for 35.230.102.204:80 server listening on 172.17.0.2:8089
15:59:09 D network.go:80> Host already an IP, will go to 35.230.102.204
15:59:09 I fortio_main.go:186> All fortio 0.8.1-pre 2018-03-20 22:32 0e1347b31d9eb6d190f29b81b2ee710697b6c6c3 go1.10 servers started!

Then curl the Fortio proxy address:port:

# Get the IP of the Fortio server Docker container:
FORTIO_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' fortio_server)

$ docker run istio/fortio.fcurl:latest -loglevel debug -L http://$FORTIO_IP:8089/echo/

Fortio Client

Fortio provides a grpc and an http client that is used to generate loads and collect statistics.

load is the http client:

$ docker run istio/fortio:latest load http://$FORTIO_IP:8080/echo/
Fortio 0.3.6 running at 8 queries per second, 8->8 procs, for 5s: http://www.google.com
19:10:33 I httprunner.go:84> Starting http test for http://www.google.com with 4 threads at 8.0 qps
Starting at 8 qps with 4 thread(s) [gomax 8] for 5s : 10 calls each (total 40)
19:10:39 I periodic.go:314> T002 ended after 5.056753279s : 10 calls. qps=1.9775534712220633
19:10:39 I periodic.go:314> T001 ended after 5.058085991s : 10 calls. qps=1.9770324224999916
19:10:39 I periodic.go:314> T000 ended after 5.058796046s : 10 calls. qps=1.9767549252963101
19:10:39 I periodic.go:314> T003 ended after 5.059557593s : 10 calls. qps=1.9764573910247019
Ended after 5.059691387s : 40 calls. qps=7.9056
Sleep times : count 36 avg 0.49175757 +/- 0.007217 min 0.463508712 max 0.502087879 sum 17.7032725
Aggregated Function Time : count 40 avg 0.060587641 +/- 0.006564 min 0.052549016 max 0.089893269 sum 2.42350566
# range, mid point, percentile, count
>= 0.052549 < 0.06 , 0.0562745 , 47.50, 19
>= 0.06 < 0.07 , 0.065 , 92.50, 18
>= 0.07 < 0.08 , 0.075 , 97.50, 2
>= 0.08 <= 0.0898933 , 0.0849466 , 100.00, 1
# target 50% 0.0605556
# target 75% 0.0661111
# target 99% 0.085936
# target 99.9% 0.0894975
Code 200 : 40
Response Header Sizes : count 40 avg 690.475 +/- 15.77 min 592 max 693 sum 27619
Response Body/Total Sizes : count 40 avg 12565.2 +/- 301.9 min 12319 max 13665 sum 502608
All done 40 calls (plus 4 warmup) 60.588 ms avg, 7.9 qps

grcping is the grpc client used for generating loads to a grpc server endpoint:

$ docker run istio/fortio:latest grpcping $FORTIO_IP
Clock skew histogram usec : count 1 avg 94.837 +/- 0 min 94.837 max 94.837 sum 94.837
# range, mid point, percentile, count
>= 94.837 <= 94.837 , 94.837 , 100.00, 1
# target 50% 94.837
RTT histogram usec : count 3 avg 887.94233 +/- 214.7 min 716.047 max 1190.582 sum 2663.827
# range, mid point, percentile, count
>= 716.047 <= 800 , 758.024 , 66.67, 2
> 1000 <= 1190.58 , 1095.29 , 100.00, 1
# target 50% 758.024
19:52:22 I pingsrv.go:114> Ping RTT 887942 (avg of 757198, 716047, 1190582 ns) clock skew 94837

A fcurl minimal curl client binary was added in the latest (v0.8) release. The compressed image size is roughly 2MB. This client is the same as fortio curl

$ docker run istio/fortio.fcurl:latest -loglevel debug -L http://$FORTIO_IP:8080/echo/
15:35:29 I logger.go:97> Log level is now 0 Debug (was 2 Info)
15:35:29 V http_client.go:86> URLSchemeCheck &{URL:http://172.17.0.2:8080/echo/ NumConnections:1 Compression:false DisableFastClient:true HTTP10:false DisableKeepAlive:false AllowHalfClose:false Insecure:false FollowRedirects:true initDone:true https:false extraHeaders:map[User-Agent:[istio/fortio-0.8.1]] hostOverride: HTTPReqTimeOut:15s}
15:35:29 V http_client.go:86> URLSchemeCheck &{URL:http://172.17.0.2:8080/echo/ NumConnections:1 Compression:false DisableFastClient:true HTTP10:false DisableKeepAlive:false AllowHalfClose:false Insecure:false FollowRedirects:true initDone:true https:false extraHeaders:map[User-Agent:[istio/fortio-0.8.1]] hostOverride: HTTPReqTimeOut:15s}
15:35:29 D http_client.go:202> For URL http://172.17.0.2:8080/echo/, sending:
GET /echo/ HTTP/1.1
Host: 172.17.0.2:8080
User-Agent: istio/fortio-0.8.1
Accept-Encoding: gzip

15:35:29 D http_client.go:253> For URL http://172.17.0.2:8080/echo/, received:
HTTP/1.1 200 OK
Date: Wed, 21 Mar 2018 15:35:29 GMT
Content-Length: 0

15:35:29 D http_client.go:268> Got 200 : 200 OK for http://172.17.0.2:8080/echo/ - response is 0 bytes
15:35:29 V commonflags.go:101> Fetch result code 200, data len 0, headerlen 0

The minimal fcurl client is the same fortio curl client:

$ docker run istio/fortio:latest curl -loglevel debug -L http://$FORTIO_IP:8080/echo/
5:35:29 I logger.go:97> Log level is now 0 Debug (was 2 Info)
15:35:29 V http_client.go:86> URLSchemeCheck &{URL:http://172.17.0.2:8080/echo/ NumConnections:1 Compression:false DisableFastClient:true HTTP10:false DisableKeepAlive:false AllowHalfClose:false Insecure:false FollowRedirects:true initDone:true https:false extraHeaders:map[User-Agent:[istio/fortio-0.8.1]] hostOverride: HTTPReqTimeOut:15s}
15:35:29 V http_client.go:86> URLSchemeCheck &{URL:http://172.17.0.2:8080/echo/ NumConnections:1 Compression:false DisableFastClient:true HTTP10:false DisableKeepAlive:false AllowHalfClose:false Insecure:false FollowRedirects:true initDone:true https:false extraHeaders:map[User-Agent:[istio/fortio-0.8.1]] hostOverride: HTTPReqTimeOut:15s}
15:35:29 D http_client.go:202> For URL http://172.17.0.2:8080/echo/, sending:
GET /echo/ HTTP/1.1
Host: 172.17.0.2:8080
User-Agent: istio/fortio-0.8.1
Accept-Encoding: gzip

15:35:29 D http_client.go:253> For URL http://172.17.0.2:8080/echo/, received:
HTTP/1.1 200 OK
Date: Wed, 21 Mar 2018 15:35:29 GMT
Content-Length: 0

15:35:29 D http_client.go:268> Got 200 : 200 OK for http://172.17.0.2:8080/echo/ - response is 0 bytes
15:35:29 V commonflags.go:101> Fetch result code 200, data len 0, headerlen 0

Fortio Library

forexample is an example Fortio library implementation. Results of test run.

istio/tools/setup_perf_cluster.sh deploys a GKE cluster, an Istio service mesh and a GCE VM. The script then runs Fortio on the VM, 2 pods within the cluster (non-Istio) and 2 pods within the Istio mesh.

Download and untar the Istio release (for Mac):

$ RELEASE=0.6
$ wget https://github.com/istio/istio/releases/download/$RELEASE/istio-$RELEASE.0-osx.tar.gz
$ tar -xvf istio-$RELEASE.0-osx.tar.gz

Copy the istioctl client binary to your $PATH:

$ cp istio-$RELEASE.0/bin/istioctl /usr/local/bin/istioctl

Clone the Istio repo, which contains the perf cluster setup script:

$ git clone -b release-$RELEASE https://github.com/istio/istio.git

Source the script:

$ source istio/tools/setup_perf_cluster.sh

Run the setup_all function:

$ setup_all
Obtaining latest ubuntu xenial image name... (takes a few seconds)...
Creating VM_NAME=fortio-vm using VM_IMAGE=https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-1604-xenial-v20180306
<SNIP>

Run the get_ips function:

$ get_ips
+++ VM Ip is 35.230.102.204 - visit http://35.230.102.204/fortio/
+++ In k8s fortio external ip: http://35.230.62.254:8080/fortio/
+++ In k8s non istio ingress: http://35.227.220.111/fortio/
+++ In k8s istio ingress: http://35.230.50.21/fortio1/fortio/ and fortio2

Test access to the IPs with curl or your web browser.

Fortio References

Fortio Repository

Istio perf-cluster

Online Fortio Reporting Server

Histograms

12:12:38 I httprunner.go:73> Starting http test for http://localhost:8080/echo/ with 5 threads at 100.0 qps
Starting at 100 qps with 5 thread(s) [gomax 8] : exactly 300, 60 calls each (total 300 + 0)
12:12:41 I periodic.go:519> T002 ended after 3.005315229s : 60 calls. qps=19.964627810429267
12:12:41 I periodic.go:519> T004 ended after 3.005419341s : 60 calls. qps=19.963936207330075
12:12:41 I periodic.go:519> T001 ended after 3.005442624s : 60 calls. qps=19.963781547805716
12:12:41 I periodic.go:519> T003 ended after 3.005512524s : 60 calls. qps=19.96331724485604
12:12:41 I periodic.go:519> T000 ended after 3.005548968s : 60 calls. qps=19.96307517821816
Ended after 3.005573309s : 300 calls. qps=99.815
Sleep times : count 295 avg 0.046176682 +/- 0.001464 min 0.043509764 max 0.049814887 sum 13.6221211
Aggregated Function Time : count 300 avg 0.0015088241 +/- 0.0004362 min 0.000800228 max 0.003243081 sum 0.452647239
# range, mid point, percentile, count
>= 0.000800228 <= 0.001 , 0.000900114 , 9.67, 29
> 0.001 <= 0.002 , 0.0015 , 86.00, 229
> 0.002 <= 0.003 , 0.0025 , 98.67, 38
> 0.003 <= 0.00324308 , 0.00312154 , 100.00, 4
# target 90% 0.00231579
Sockets used: 5 (for perfect keepalive, would be 5)
Code 200 : 300 (100.0 %)
Response Header Sizes : count 300 avg 116 +/- 0 min 116 max 116 sum 34800
Response Body/Total Sizes : count 300 avg 116 +/- 0 min 116 max 116 sum 34800
12:12:41 I httprunner.go:73> Starting http test for http://35.230.102.204/echo/ with 5 threads at 100.0 qps
Starting at 100 qps with 5 thread(s) [gomax 8] : exactly 300, 60 calls each (total 300 + 0)
12:12:44 I periodic.go:519> T001 ended after 3.043028059s : 60 calls. qps=19.71720235130438
12:12:44 I periodic.go:519> T004 ended after 3.043136146s : 60 calls. qps=19.71650202994237
12:12:44 I periodic.go:519> T003 ended after 3.04479281s : 60 calls. qps=19.70577433148891
12:12:44 I periodic.go:519> T000 ended after 3.045292415s : 60 calls. qps=19.702541438865403
12:12:44 I periodic.go:519> T002 ended after 3.047578899s : 60 calls. qps=19.687759361927515
Ended after 3.047628953s : 300 calls. qps=98.437
Aggregated Sleep Time : count 295 avg 0.0058155005 +/- 0.008283 min -0.038514679 max 0.012556828 sum 1.71557265
# range, mid point, percentile, count
>= -0.0385147 <= -0.001 , -0.0197573 , 7.12, 21
> 0 <= 0.001 , 0.0005 , 8.14, 3
> 0.001 <= 0.002 , 0.0015 , 9.49, 4
> 0.002 <= 0.003 , 0.0025 , 12.20, 8
> 0.003 <= 0.004 , 0.0035 , 17.29, 15
> 0.004 <= 0.005 , 0.0045 , 21.02, 11
> 0.005 <= 0.006 , 0.0055 , 24.41, 10
> 0.006 <= 0.007 , 0.0065 , 35.93, 34
> 0.007 <= 0.008 , 0.0075 , 48.47, 37
> 0.008 <= 0.009 , 0.0085 , 67.12, 55
> 0.009 <= 0.01 , 0.0095 , 83.05, 47
> 0.01 <= 0.011 , 0.0105 , 91.86, 26
> 0.011 <= 0.0125568 , 0.0117784 , 100.00, 24
# target 50% 0.00808182
WARNING 7.12% of sleep were falling behind
Aggregated Function Time : count 300 avg 0.042595079 +/- 0.006116 min 0.037361126 max 0.089316738 sum 12.7785238
# range, mid point, percentile, count
>= 0.0373611 <= 0.04 , 0.0386806 , 23.67, 71
> 0.04 <= 0.045 , 0.0425 , 88.33, 194
> 0.045 <= 0.05 , 0.0475 , 98.33, 30
> 0.08 <= 0.0893167 , 0.0846584 , 100.00, 5
# target 90% 0.0458333
Sockets used: 5 (for perfect keepalive, would be 5)
Code 200 : 300 (100.0 %)
Response Header Sizes : count 300 avg 116 +/- 0 min 116 max 116 sum 34800
Response Body/Total Sizes : count 300 avg 116 +/- 0 min 116 max 116 sum 34800
12:12:44 I httprunner.go:73> Starting http test for http://35.230.62.254:8080/echo/ with 5 threads at 100.0 qps
Starting at 100 qps with 5 thread(s) [gomax 8] : exactly 300, 60 calls each (total 300 + 0)
12:12:47 I periodic.go:519> T000 ended after 3.041699845s : 60 calls. qps=19.725812229181344
12:12:47 I periodic.go:519> T004 ended after 3.043285604s : 60 calls. qps=19.71553373798958
12:12:47 I periodic.go:519> T003 ended after 3.043343682s : 60 calls. qps=19.715157494328633
12:12:47 I periodic.go:519> T001 ended after 3.043454468s : 60 calls. qps=19.714439835017107
12:12:47 I periodic.go:519> T002 ended after 3.043760457s : 60 calls. qps=19.71245794392683
Ended after 3.04380524s : 300 calls. qps=98.561
Aggregated Sleep Time : count 295 avg 0.0050309651 +/- 0.009419 min -0.042909499 max 0.012303427 sum 1.4841347
# range, mid point, percentile, count
>= -0.0429095 <= -0.001 , -0.0219547 , 8.47, 25
> -0.001 <= 0 , -0.0005 , 8.81, 1
> 0 <= 0.001 , 0.0005 , 9.15, 1
> 0.001 <= 0.002 , 0.0015 , 9.83, 2
> 0.002 <= 0.003 , 0.0025 , 12.20, 7
> 0.003 <= 0.004 , 0.0035 , 14.58, 7
> 0.004 <= 0.005 , 0.0045 , 15.59, 3
> 0.005 <= 0.006 , 0.0055 , 21.36, 17
> 0.006 <= 0.007 , 0.0065 , 37.63, 48
> 0.007 <= 0.008 , 0.0075 , 60.34, 67
> 0.008 <= 0.009 , 0.0085 , 80.00, 58
> 0.009 <= 0.01 , 0.0095 , 90.85, 32
> 0.01 <= 0.011 , 0.0105 , 97.63, 20
> 0.011 <= 0.0123034 , 0.0116517 , 100.00, 7
# target 50% 0.00754478
WARNING 8.47% of sleep were falling behind
Aggregated Function Time : count 300 avg 0.042873038 +/- 0.006403 min 0.037931401 max 0.093625149 sum 12.8619115
# range, mid point, percentile, count
>= 0.0379314 <= 0.04 , 0.0389657 , 9.33, 28
> 0.04 <= 0.045 , 0.0425 , 92.33, 249
> 0.045 <= 0.05 , 0.0475 , 98.33, 18
> 0.08 <= 0.09 , 0.085 , 99.67, 4
> 0.09 <= 0.0936251 , 0.0918126 , 100.00, 1
# target 90% 0.0448594
Sockets used: 5 (for perfect keepalive, would be 5)
Code 200 : 300 (100.0 %)
Response Header Sizes : count 300 avg 75 +/- 0 min 75 max 75 sum 22500
Response Body/Total Sizes : count 300 avg 75 +/- 0 min 75 max 75 sum 22500
12:12:47 I httprunner.go:73> Starting http test for http://35.227.220.111/echo/ with 5 threads at 100.0 qps
Starting at 100 qps with 5 thread(s) [gomax 8] : exactly 300, 60 calls each (total 300 + 0)
12:12:50 I periodic.go:519> T003 ended after 3.038022238s : 60 calls. qps=19.749690851341292
12:12:50 I periodic.go:519> T004 ended after 3.038168885s : 60 calls. qps=19.74873756894525
12:12:50 I periodic.go:519> T000 ended after 3.04052041s : 60 calls. qps=19.733463982897586
12:12:50 I periodic.go:519> T001 ended after 3.282198596s : 60 calls. qps=18.2804294880638
12:12:51 I periodic.go:519> T002 ended after 3.905470792s : 60 calls. qps=15.363064581843632
Ended after 3.905512742s : 300 calls. qps=76.814
Aggregated Sleep Time : count 295 avg -0.07052034 +/- 0.2671 min -1.138961103 max 0.014384844 sum -20.8035004
# range, mid point, percentile, count
>= -1.13896 <= -0.001 , -0.569981 , 12.20, 36
> -0.001 <= 0 , -0.0005 , 12.88, 2
> 0 <= 0.001 , 0.0005 , 13.90, 3
> 0.001 <= 0.002 , 0.0015 , 15.25, 4
> 0.002 <= 0.003 , 0.0025 , 16.27, 3
> 0.003 <= 0.004 , 0.0035 , 16.95, 2
> 0.004 <= 0.005 , 0.0045 , 17.29, 1
> 0.005 <= 0.006 , 0.0055 , 20.34, 9
> 0.006 <= 0.007 , 0.0065 , 24.75, 13
> 0.007 <= 0.008 , 0.0075 , 30.85, 18
> 0.008 <= 0.009 , 0.0085 , 41.69, 32
> 0.009 <= 0.01 , 0.0095 , 52.88, 33
> 0.01 <= 0.011 , 0.0105 , 69.15, 48
> 0.011 <= 0.013 , 0.012 , 89.15, 59
> 0.013 <= 0.0143848 , 0.0136924 , 100.00, 32
# target 50% 0.00974242
WARNING 12.20% of sleep were falling behind
Aggregated Function Time : count 300 avg 0.044860828 +/- 0.06825 min 0.035618475 max 1.188015384 sum 13.4582483
# range, mid point, percentile, count
>= 0.0356185 <= 0.04 , 0.0378092 , 60.33, 181
> 0.04 <= 0.045 , 0.0425 , 92.33, 96
> 0.045 <= 0.05 , 0.0475 , 96.33, 12
> 0.05 <= 0.06 , 0.055 , 99.00, 8
> 0.06 <= 0.07 , 0.065 , 99.33, 1
> 0.3 <= 0.35 , 0.325 , 99.67, 1
> 1 <= 1.18802 , 1.09401 , 100.00, 1
# target 90% 0.0446354
Sockets used: 5 (for perfect keepalive, would be 5)
Code 200 : 300 (100.0 %)
Response Header Sizes : count 300 avg 92 +/- 0 min 92 max 92 sum 27600
Response Body/Total Sizes : count 300 avg 92 +/- 0 min 92 max 92 sum 27600
12:12:51 I httprunner.go:73> Starting http test for http://35.230.50.21/fortio1/echo/ with 5 threads at 100.0 qps
Starting at 100 qps with 5 thread(s) [gomax 8] : exactly 300, 60 calls each (total 300 + 0)
	example_test.go:58: Successfully sent request(s) to destination: http://localhost:8080/echo/; calculating results...
12:12:54 I periodic.go:519> T000 ended after 3.045674887s : 60 calls. qps=19.70006721863219
	example_test.go:59: Fortio Summary: 300 reqs (99.814568 rps, 300.000000 200s (99.814568 rps), 0 400s)
12:12:54 I periodic.go:519> T001 ended after 3.045994198s : 60 calls. qps=19.698002064283646
	example_test.go:58: Successfully sent request(s) to destination: http://35.230.102.204/echo/; calculating results...
	example_test.go:59: Fortio Summary: 300 reqs (98.437180 rps, 300.000000 200s (98.437180 rps), 0 400s)
	example_test.go:58: Successfully sent request(s) to destination: http://35.230.62.254:8080/echo/; calculating results...
12:12:54 I periodic.go:519> T003 ended after 3.046160996s : 60 calls. qps=19.696923464908025
	example_test.go:59: Fortio Summary: 300 reqs (98.560840 rps, 300.000000 200s (98.560840 rps), 0 400s)
12:12:54 I periodic.go:519> T004 ended after 3.047235571s : 60 calls. qps=19.689977555726035
12:12:54 I periodic.go:519> T002 ended after 3.04883048s : 60 calls. qps=19.679677303672193
Ended after 3.048867237s : 300 calls. qps=98.397
Aggregated Sleep Time : count 295 avg -0.003252847 +/- 0.01494 min -0.057474651 max 0.008961669 sum -0.959589865
# range, mid point, percentile, count
>= -0.0574747 <= -0.001 , -0.0292373 , 25.76, 76
> -0.001 <= 0 , -0.0005 , 28.81, 9
	example_test.go:58: Successfully sent request(s) to destination: http://35.227.220.111/echo/; calculating results...
	example_test.go:59: Fortio Summary: 300 reqs (76.814498 rps, 300.000000 200s (76.814498 rps), 0 400s)
	example_test.go:58: Successfully sent request(s) to destination: http://35.230.50.21/fortio1/echo/; calculating results...
> 0 <= 0.001 , 0.0005 , 35.25, 19
	example_test.go:59: Fortio Summary: 300 reqs (98.397200 rps, 300.000000 200s (98.397200 rps), 0 400s)
> 0.001 <= 0.002 , 0.0015 , 45.42, 30
> 0.002 <= 0.003 , 0.0025 , 57.29, 35

> 0.003 <= 0.004 , 0.0035 , 68.47, 33

> 0.004 <= 0.005 , 0.0045 , 81.69, 39

> 0.005 <= 0.006 , 0.0055 , 91.53, 29

> 0.006 <= 0.007 , 0.0065 , 96.95, 16

> 0.007 <= 0.008 , 0.0075 , 98.98, 6

> 0.008 <= 0.00896167 , 0.00848083 , 100.00, 3

# target 50% 0.00238571

WARNING 25.76% of sleep were falling behind

Aggregated Function Time : count 300 avg 0.047847376 +/- 0.007884 min 0.041239523 max 0.108288089 sum 14.3542127

# range, mid point, percentile, count

>= 0.0412395 <= 0.045 , 0.0431198 , 24.33, 73

> 0.045 <= 0.05 , 0.0475 , 87.33, 189

> 0.05 <= 0.06 , 0.055 , 97.00, 29

> 0.06 <= 0.07 , 0.065 , 98.33, 4

> 0.09 <= 0.1 , 0.095 , 98.67, 1

> 0.1 <= 0.108288 , 0.104144 , 100.00, 4

# target 90% 0.0527586

Sockets used: 5 (for perfect keepalive, would be 5)

Code 200 : 300 (100.0 %)

Response Header Sizes : count 300 avg 124.04667 +/- 0.2109 min 124 max 125 sum 37214

Response Body/Total Sizes : count 300 avg 124.04667 +/- 0.2109 min 124 max 125 sum 37214

Process finished with exit code 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment