Docker Web Performance Tests


Abstract

In a series of performance tests, we could show that a (Rails) web application has 50% higher performance on docker (installed on Windows/boot2docker) than the same application run natively on Windows, no matter whether or not the database and program code is located on a shared volume. However, if such a shared volume is auto-mounted to one of the Windows C:\Users folders, the performance drops by a factor of almost ten.

Preface

This is the 5th blog of my Dummy’s Diary on Docker (= DDDocker), which originally was hosted on LinkedIn. See the DDDocker table of contents to find more.

Introduction

What is the performance of a dockerized application compared to the same application running natively on Windows or Linux or on a Windows or Linux VM? This is, what I have asked myself when starting with Docker. However, my Internet search on that subject has not given me the desired results. I cannot believe that there are no such articles in the Internet, and if you happen to find some, please point them to me. In any case, I have decided to perform some quick&dirty tests myself. I call them “quick&dirty”, because I did not care to separate the measurement tool from the server: everything is performed on my Windows Laptop. Also, I did not care to document the exact test setup (Rails version, Laptop data sheet, etc.). For now, I have deemed it sufficient to get an idea on the trend, rather more than the absolute numbers.

I have received some unexpected results…

Test Scenarios

In DDDocker (4): Persistence via shared Volumes (sorry, this is a LinkedIn blog, which has a limited lifetime; tell me, if you need access) we have experienced a major decrease of performance of a web server, when the server’s code and data base is located on a shared volume on a Windows host.

In the current blog, we perform performance measurements of a Rails web server for following scenarios:

  1. web server run natively on Windows
  2. web server run within a docker container with all source code and database in the container. The docker container runs on a VirtualBox VM with 2 GB DRAM (boot2docker image).
  3. web server run within a docker container with all source code and and database in a shared volume. The docker container runs on a VirtualBox VM with 2 GB DRAM (boot2docker VM). The shared volume is located on the Linux VM (docker host, i.e. the boot2docker VM).
  4. web server run within a docker container with all source code and and database in a shared volume. The docker container runs on a VirtualBox VM with 2 GB DRAM (boot2docker image). The shared volume is located on the C: partition on Windows and is mapped to the VM and from there it is mapped to the docker container.

The quick and dirty tests are performed using Apache Bench tool “ab.exe” on my Windows Laptop, which is also hosting the Web Server and/or the boot2docker host. This is not a scientific setup, but we still will get meaningful results, since we are interested in relative performance numbers only.

1. Windows Scenario

In this scenario the rails application runs natively on Windows. All Ruby on Rails code as well as the local database reside on a local Windows folder.

2. Docker on Linux VM Scenario

In this scenario, Docker is installed on Windows like specified on the Docker documentation. A Linux VM is running on Windows and hosts the container. All Ruby on Rails code as well as the local database reside on a folder within the container.

3. Docker on Linux VM Scenario with shared Volume

The difference between this scenario and scenario 2 is that all Ruby on Rails code as well as the local database reside on a folder in the Linux VM and are mounted as so-called virtual volume into the container.

4. Docker on Linux VM Scenario with shared Volume mounted on Windows

The difference between this scenario and scenario 3 is that all Ruby on Rails code as well as the local database reside on a Windows folder on C:\Users\. The rails executable within the container is accessing a local folder which maps to the Linux’s hosts folder via the shared volume feature, which in turn maps to the auto-mounted Windows folder on C:\Users\<username>\<foldername>. Because of the extra-hops, the lowest performance is expected here. We will see below that this performance impact for this scenario is dramatic.

Test Environment / Equipment

All tests will be run on a Windows 7 Dell i5 notebook with 8 GB of RAM. During the native Windows test, the docker VM will run in parallel, so the CPU and RAM resources available for the app are similar in all 4 tests.

As the performance test tool, Apache Bench (ab.exe) is used, which ships with XAMPP installer (xampp-win32-5.6.8-0-VC11-installer.exe).

We perform 1000 read requests, with a concurrency factor 100. Each request will cause a SQL query and returns ~245 kB text.

For the tests, I have intentionally chosen an operation that is quite slow: a GET command that searches and reads 240 kB text from an SQLite database on an (already overloaded) laptop.

The total performance numbers are not meaningful for other web applications, different databases etc. However, the relative numbers are meaningful for the purpose to compare the different setups.

Results

From the overhead point of view, I would have expected a performance relation like follows:

Expectation:

  1. native Windows performance is greater than
  2. Docker performance on Linux VM on Windows is greater than 
  3. Docker performance on Linux VM on Windows with shared volume is greater than
  4. Docker performance on Linux VM on Windows with shared volume auto-mounted on Windows

However, I have found the surprising results that native Windows performance ~33% lower than Docker performance:

Finding 1: Rails on docker outperforms native Rails on Windows by 50%, even if the Docker Linux host is a VM, which is hosted on Windows.

In addition, we have seen that:

Finding 2: the performance of a dockerized (Rails) web application is not degraded by locating the database and (Rails) program code on a shared volume.

The next finding was already expected from our experience in the last blog:

Finding 3: the performance of a dockerized (Rails) web application drops dramatically (by factor of ~10), if the shared volume is auto-mounted on a C:\Users folder.

The last statement was expected from the DDDocker (4) blog. Here the results in detail:

This graph shows the number of GET requests per second the web portal can handle. Docker outperforms Windows by ~50%, no matter whether docker is run with local folders or with shared volumes pointing to the Linux host. The performance drops by the factor of ~9, if the shared folder is used to access an auto-mounted Windows folder.

The same picture is seen with respect to the throughput, since the transfer rate is proportional to the requests/sec rate:

A corresponding inverse picture is seen with respect to the average time an end user has to wait for each request: because of the overload situation with 100 parallel requests, each requests takes 5.88, 3.89 and 34.59 (!) seconds for the application running on Windows, on a docker container within the VirtualBox VM and on a docker image again, but with all data located on a shared Volume.

Since the shared volume is located on Windows and is auto-mounted to the VM, and then is mounted to the container, there is no surprise that the performance is lower. A response time increase of a factor 8.9 is still an unexpected high factor you have to take into consideration when working with shared volumes on Windows machines.

Appendix

Preparation of Scenario 3

The preparation of scenarios 1, 2 and 4 have been described in the last blog already. Here is a description on how I have built scenario 3:

We need to copy the folder from Windows into the Linux VM. This way the performance test would also have relevance for docker users that are running docker on Linux. Let us see:

(Linux VM)# sudo cp -R /c/Users/vo062111/dockersharedfolder2 /home/rails/

will copy the auto-mounted volume to /home/rails/dockersharedfolder2 inside the VM. Now let us start a container, which maps to this folder instead of the /c/Users/vo062111/dockersharedfolder2, which is volume that is mounted from Windows.

docker@boot2docker:~$ JOB=$(docker run -d -p 8080:3000 -v /home/rails/dockersharedfolder2:/home/rails/ProvisioningEngine oveits/rails_provisioningengine:latest /bin/bash -c "cd /home/rails/ProvisioningEngine; rails s")

With that we get rid of the auto-mount-hop, when we compare it to scenaro 4.

Scenario 1: Test Protocol Rails Server on native Windows

bash-3.1$ ./ab -n 1000 -c 100 "http://127.0.0.1:3000/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 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 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 127.0.0.1
 Server Port: 300
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 58.774 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 17.01 [#/sec] (mean)
 Time per request: 5877.425 [ms] (mean)
 Time per request: 58.774 [ms] (mean, across all concurrent requests)
 Transfer rate: 4077.01 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 0 0 0.3 1 4
 Processing: 84 5630 1067.3 5723 12428
 Waiting: 79 5623 1067.7 5718 12424
 Total: 85 5630 1067.3 5723 12428
 ERROR: The median and mean for the initial connection time are more than twice the standard
 deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 5723
66% 6072
75% 6156
80% 6205
90% 6418
95% 6496
98% 6549
99% 6566
100% 12428 (longest request)
 bash-3.1$ ./ab -n 1000 -c 100 "http://127.0.0.1:3000/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 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 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 127.0.0.1
 Server Port: 3000
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 58.761 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 17.02 [#/sec] (mean)
 Time per request: 5876.075 [ms] (mean)
 Time per request: 58.761 [ms] (mean, across all concurrent requests)
 Transfer rate: 4077.94 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 0 0 0.3 1 4
 Processing: 55 5590 1117.4 5779 11605
 Waiting: 51 5584 1117.5 5773 11601
 Total: 56 5590 1117.5 5780 11605
 ERROR: The median and mean for the initial connection time are more than twice the standard
 deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
 50% 5780
 66% 5929
 75% 5999
 80% 6052
 90% 6173
 95% 6276
 98% 6411
 99% 6443
 100% 11605 (longest request)
 bash-3.1$

Server Logs

...
Started GET "/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config" for 127.0.0.1 at 2015-07-09 08:57:43 +0200
 Processing by TextDocumentsController#index as TEXT
 Parameters: {"filter"=>{"systemType"=>"OSV_V7R1", "action"=>"Add Customer", "templateType"=>"config"}}
 TextDocument Load (0.5ms) SELECT "text_documents".* FROM "text_documents"
 Rendered text_documents/index.text.erb (0.5ms)
 Completed 200 OK in 18ms (Views: 15.0ms | ActiveRecord: 0.5ms)
...

Summary

  • 15.4 requests/sec and 6.5 sec/requests at 100 concurrent requests and a total of 1000 requests with ~245 kB answer per request.

Open Issue:

  • ab.exe tells us that the responses are non-2xx, but the server log shows 200 OK.

2) Test Protocol Rails Server on Docker

bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 32.550 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 30.72 [#/sec] (mean)
 Time per request: 3254.951 [ms] (mean)
 Time per request: 32.550 [ms] (mean, across all concurrent requests)
 Transfer rate: 7361.80 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 1 4 3.1 3 28
 Processing: 66 3103 697.2 3186 6725
 Waiting: 22 3049 694.9 3135 6665
 Total: 73 3107 697.3 3190 6728
Percentage of the requests served within a certain time (ms)
 50% 3190
 66% 3245
 75% 3297
 80% 3349
 90% 3693
 95% 3783
 98% 3888
 99% 6004
 100% 6728 (longest request)
 bash-3.1$

 bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 45.330 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 22.06 [#/sec] (mean)
 Time per request: 4533.006 [ms] (mean)
 Time per request: 45.330 [ms] (mean, across all concurrent requests)
 Transfer rate: 5286.18 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 1 6 8.0 4 127
 Processing: 76 4290 1588.3 3969 14826
 Waiting: 29 4210 1587.7 3901 14647
 Total: 84 4296 1589.0 3976 14846
Percentage of the requests served within a certain time (ms)
 50% 3976
 66% 4130
 75% 4530
 80% 5083
 90% 5699
 95% 7520
 98% 9635
 99% 10546
 100% 14846 (longest request)
 bash-3.1$

Summary

  • 26 requests/sec and 3,9 sec/requests at 100 concurrent requests and a total of 1000 requests with ~245 kB answer per request.

Open Issue:

  • ab.exe tells us that the responses are non-2xx, but the server log shows 200 OK.

3) Test Protocol Rails Server on Docker with Source Code and DB on a shared Volume residing on the Linux VM

Docker command:

docker@boot2docker:~$ JOB=$(docker run -d -p 8080:3000 -v /c/Users/vo062111/dockersharedfolder2:/home/rails/ProvisioningEngine oveits/rails_provisioningengine:latest /bin/bash -c "cd /home/rails/ProvisioningEngine; rails s")

ab.exe log Test 1

bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 34.173 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 29.26 [#/sec] (mean)
 Time per request: 3417.283 [ms] (mean)
 Time per request: 34.173 [ms] (mean, across all concurrent requests)
 Transfer rate: 7012.09 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 1 4 4.4 3 65
 Processing: 103 3232 726.1 3303 7013
 Waiting: 58 3164 725.8 3235 6900
 Total: 107 3236 726.1 3308 7015
Percentage of the requests served within a certain time (ms)
 50% 3308
 66% 3448
 75% 3552
 80% 3619
 90% 3768
 95% 3948
 98% 4148
 99% 4346
 100% 7015 (longest request)

ab.exe log Test 2

bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 36.615 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 27.31 [#/sec] (mean)
 Time per request: 3661.482 [ms] (mean)
 Time per request: 36.615 [ms] (mean, across all concurrent requests)
 Transfer rate: 6544.43 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 1 4 4.1 3 30
 Processing: 83 3458 1077.6 3531 8051
 Waiting: 38 3378 1070.1 3452 7886
 Total: 84 3462 1077.7 3532 8055
Percentage of the requests served within a certain time (ms)
 50% 3532
 66% 3776
 75% 3895
 80% 3985
 90% 4430
 95% 4680
 98% 6623
 99% 7259
 100% 8055 (longest request)
 bash-3.1$

4) Test Protocol Rails Server on Docker with Source Code and DB on a shared Volume residing on Windows

Docker command:

docker@boot2docker:~$ JOB=$(docker run -d -p 8080:3000 -v /c/Users/vo062111/dockersharedfolder2:/home/rails/ProvisioningEngine oveits/rails_provisioningengine:latest /bin/bash -c "cd /home/rails/ProvisioningEngine; rails s")

ab.exe log Test 1

bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 348.463 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 2.87 [#/sec] (mean)
 Time per request: 34846.268 [ms] (mean)
 Time per request: 348.463 [ms] (mean, across all concurrent requests)
 Transfer rate: 687.66 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 1 3 4.8 2 112
 Processing: 598 33224 6430.7 34965 57297
 Waiting: 468 33076 6427.7 34808 57177
 Total: 600 33227 6430.6 34966 57299
Percentage of the requests served within a certain time (ms)
 50% 34966
 66% 35521
 75% 35781
 80% 35961
 90% 37069
 95% 37879
 98% 38203
 99% 38340
 100% 57299 (longest request)

ab.exe log Test 2

bash-3.1$ ./ab -n 1000 -c 100 "http://192.168.56.101:8080/text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config"
 This is ApacheBench, Version 2.3 <$Revision: 1638069 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.56.101 (be patient)
 Completed 100 requests
 Completed 200 requests
 Completed 300 requests
 Completed 400 requests
 Completed 500 requests
 Completed 600 requests
 Completed 700 requests
 Completed 800 requests
 Completed 900 requests
 Completed 1000 requests
 Finished 1000 requests
 Server Software: WEBrick/1.3.1
 Server Hostname: 192.168.56.101
 Server Port: 8080
Document Path: /text_documents.txt/?filter[systemType]=OSV_V7R1&filter[action]=Add%20Customer&filter[templateType]=config
 Document Length: 244884 bytes
Concurrency Level: 100
 Time taken for tests: 343.399 seconds
 Complete requests: 1000
 Failed requests: 0
 Total transferred: 245374000 bytes
 HTML transferred: 244884000 bytes
 Requests per second: 2.91 [#/sec] (mean)
 Time per request: 34339.862 [ms] (mean)
 Time per request: 343.399 [ms] (mean, across all concurrent requests)
 Transfer rate: 697.80 [Kbytes/sec] received
Connection Times (ms)
 min mean[+/-sd] median max
 Connect: 0 2 2.2 2 23
 Processing: 639 32505 5954.2 33841 37156
 Waiting: 594 32356 5953.0 33699 37114
 Total: 643 32508 5954.2 33848 37157
Percentage of the requests served within a certain time (ms)
 50% 33848
 66% 34555
 75% 34970
 80% 35247
 90% 35872
 95% 36190
 98% 36382
 99% 36774
 100% 37157 (longest request)
 bash-3.1$

Summary

  • 2.9 requests/sec and 34.8 sec/requests at 100 concurrent requests and a total of 1000 requests with ~245 kB answer per request (i.e. 687 kB/sec)

Open Issue:

  • ab.exe tells us that the responses are non-2xx, but the server log shows 200 OK.

3 thoughts on “Docker Web Performance Tests

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s