Skip to content
Docker based performance comparison of JakartaEE microprofiles and Spring-Boot
Java Dockerfile Shell
Branch: master
Clone or download
Latest commit 987c21a Jul 5, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docker Add pingperf docker files May 4, 2019
dropwizard Add dropwizard Mar 22, 2019
micronaut Add micronaut Mar 16, 2019
microprofile Add pingperf docker files May 4, 2019
quarkus Change quarkus ping resource to a vert.x endpoint Mar 20, 2019
spring-boot Add micronaut Mar 16, 2019
vertx Add barebones vertx implementation Apr 5, 2019
.gitignore Add dropwizard Mar 22, 2019
README.md Clear Quarkus mem Jul 5, 2019
jmeter_50users.jmx Add dropwizard Mar 22, 2019

README.md

 (                      (
 )\ )                   )\ )            (
(()/( (          (  (  (()/(   (   (    )\ )
 /(_)))\   (     )\))(  /(_)) ))\  )(  (()/(
(_)) ((_)  )\ ) ((_))\ (_))  /((_)(()\  /(_))
| _ \ (_) _(_/(  (()(_)| _ \(_))   ((_)(_) _|
|  _/ | || ' \))/ _` | |  _// -_) | '_| |  _|
|_|   |_||_||_| \__, | |_|  \___| |_|   |_|
                |___/

Performance tests of java MicroProfiles, Spring-Boot, Quarkus and Micronaut

Motivation

Docker based comparision of java MicroProfiles and Spring-Boot using simple ping REST request. Docker images are based on images from hotswap-docklands.

Quick start

  • run build-X.sh to build docker image for given microprofile, spring-boot, quarkus, micronaut
  • run run-X.sh to run docker image for given microprofile, spring-boot, quarkus, micronaut
  • run wrk test with appropriate number of clients.

HW/OS

@skybber ~ $ cat /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 23
model           : 1
model name      : AMD Ryzen 5 1600 Six-Core Processor

@skybber ~ $ cat /proc/version
Linux version 5.0.0-arch1-1-ARCH (builduser@heftig-18825) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Mon Mar 4 14:11:43 UTC 2019

Wrk load tests results

Tests were splitted into 3 groups varying in the heap size and the number of users (clients):

  • Xmx128m running single client
  • Xmx128 running 50 clients

Single thread (user) / -Xmx128m

  • messured second step of following script for run in {1..2}; do wrk -t1 -c1 -d60s http://127.0.0.1:8080/pingperf/ping/simple; done
  • For Open Liberty url=http://127.0.0.1:9080/pingperf/ping/simple
  • For spring-boot url=http://127.0.0.1:8080/simple
  • For quarkus+swarm url=http://127.0.0.1:8080/ping/simple
Microprofile Start time Docker mem usage Req/s Stdev /s Latency Stdev
Meecrowave 1.2.7 0.7s 197MB 10.31k 1.79k 118.12us 280.55us
Open Liberty 19.02 ~3s 250MB 4.99k 629.76 225.59us 372.52us
Payara Micro 5.191 6s 320MB 4.96k 1.63k 223.10us 332.64us
Wildfly Swarm 2018.3.3 5s 326MB 7.40k 2.43k 186.80us 486.31us
Spring-Boot 2.1.1 1.5s 216MB 9.39k 1.29k 144.99us 521.05us
Quarkus JVM 0.11 0.68s 144M 18.43k 3.77k 62.11us 269.61us
Quarkus Native 0.11 0.023s 430M 17.86k 1.79k 78.28us 362.31us
Micronaut 1.0.3 0.907s 200 15.19k 1.84k 84.64us 310.88us

50 threads (users) / -Xmx128m

  • messured second step of following script for run in {1..2}; do wrk -t4 -c50 -d60s http://127.0.0.1:8080/pingperf/ping/simple; done
  • For Open Liberty url=http://127.0.0.1:9080/pingperf/ping/simple
  • For spring-boot url=http://127.0.0.1:8080/simple
  • For quarkus+swarm url=http://127.0.0.1:8080/ping/simple
Microprofile Start time Docker mem usage Req/s Stdev /s Latency Stdev
Meecrowave 1.2.7 0.7s 264MB 58879 1.25k*4 1110us 1400us
Open Liberty 19.02 ~3s 334MB 59205 1.10k*4 990us 1440us
Payara Micro 5.191 6s 372MB 40266 0.88k*4 2330us 4440us
Wildfly Swarm 2018.3.3 5s 388MB 62052 1.34k*4 1690us 5550us
Spring-Boot 2.1.1 1.5s 291MB 63545 1.58k*4 1200us 1750us
Quarkus JVM 0.11 0.57s 140M 80109 2.09k*4 625.98us 453.44us
Quarkus Native 0.11 0.023s 28676 0.34k*4 1710us 602.95us
Micronaut 1.0.3 0.907s 225M 140216.96 3.68k*4 1030us 2760us
You can’t perform that action at this time.