{"id":15013809,"url":"https://github.com/rmh78/quarkus-performance","last_synced_at":"2026-03-16T08:30:15.939Z","repository":{"id":43853354,"uuid":"220834903","full_name":"rmh78/quarkus-performance","owner":"rmh78","description":"Comparing the CPU/Memory utilisation - Quarkus via GraalVM Native Image vs. Quarkus via Java Runtime vs. Payara-Micro via Java Runtime.","archived":true,"fork":false,"pushed_at":"2022-09-08T01:04:23.000Z","size":15883,"stargazers_count":52,"open_issues_count":2,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-01-20T09:11:11.411Z","etag":null,"topics":["cloudnative","graal-native","graalvm","memory-footprint","payara-micro","performance","quarkus","startup-time"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rmh78.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-10T18:53:10.000Z","updated_at":"2024-12-30T11:27:08.000Z","dependencies_parsed_at":"2023-01-17T23:45:32.754Z","dependency_job_id":null,"html_url":"https://github.com/rmh78/quarkus-performance","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmh78%2Fquarkus-performance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmh78%2Fquarkus-performance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmh78%2Fquarkus-performance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rmh78%2Fquarkus-performance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rmh78","download_url":"https://codeload.github.com/rmh78/quarkus-performance/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239926574,"owners_count":19719726,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudnative","graal-native","graalvm","memory-footprint","payara-micro","performance","quarkus","startup-time"],"created_at":"2024-09-24T19:44:48.498Z","updated_at":"2026-03-16T08:30:15.877Z","avatar_url":"https://github.com/rmh78.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Comparing the CPU/Memory utilisation of a REST service (Quarkus, Payara Micro, Spring Boot, Python)\n\nSome scripts to measure the CPU and Memory utilisation of JAX-RS appliations.\nThe performance test runs inside a docker container.\n\nThe test uses the following demo projects:\n\n* **demo-payara** contains a simple JAX-RS application packaged as uber-jar with **Payara Micro (5.2020.4)** application server\n* **demo-payara-jpa** contains an advanced JAX-RS, JSON-B, CDI, JPA, PostgresDB application packaged as uber-jar with **Payara Micro (5.2020.4)** application server\n* **demo-quarkus** contains a simple **Quarkus (1.8.1.Final)** application packaged as jar and additionally compiled as native image using the GraalVM Native Image\n* **demo-quarkus-jpa** contains an advanced JAX-RS, JSON-B, CDI, JPA, PostgresDB **Quarkus (1.8.1.Final)** application packaged as jar and additionally compiled as native image using the GraalVM Native Image\n* **demo-python** contains a simple (REST service) and advanced (REST with DB access) Python application\n* **demo-spring-boot** contains a simple REST service using **Spring Boot (2.4.0-M3)**\n* **demo-spring-boot-jpa** contains an advanced REST, JSON, JPA, PostgresDB service using **Spring Boot (2.4.0-M3)**\n\n## **(1) Prepare and start plot-tests**\n\n1) Modify the **Dockerfile** (look for PROXY) to use a proxy server or not\n2) Build the docker image with ```env_build.sh``` or ```env_build.cmd```\n3) Run the image in a new docker container with ```env_run.sh``` or ```env_run.cmd```\n4) Build the demo projects inside the docker container with ```./scripts/build.sh```\n5) Run the tests inside the docker container with ```./scripts/test-all.sh```\n6) Plots are generated to directory ```plots```\n7) Logs are generated to directory ```logs```\n\n## **(2) Test scenario**\n\nThe **plot-test** consists of the following actions:\n\n* starting the application (simple JAX-RS application)\n* wait until the first http request to the JAX-RS endpoint can be served (time to first request)\n* sleep 1 second\n* start load-test using apache benchmarking tool\n  * requests: 5000\n  * concurrency: 5\n  * url: the JAX-RS endpoint of the application\n\n## **(3) Plots**\n\nAll plots are generated on my Notebook inside the running docker container.\n\nDocker Host Machine:\n\n* CPU: Intel i7-8650U 1.90GHz (8 cores)\n* RAM: 16GB\n\nDocker Engine Configuration:\n\n* CPUs: 4\n* Memory: 8 GB\n\n### **(3.1) Quarkus via GraalVM Native Image**\n\n| Simple                               | Advanced                               |\n| ------------------------------------ | -------------------------------------- |\n| ![](plots/quarkus-native-simple-ce.png) | ![](plots/quarkus-native-advanced-ce.png) |\n| ![](plots/quarkus-native-simple-ee.png) | ![](plots/quarkus-native-advanced-ee.png) |\n\n### **(3.2) Quarkus via Java Runtime**\n\n| Simple                                         | Advanced                                         |\n| ---------------------------------------------- | ------------------------------------------------ |\n| ![](plots/quarkus-java-simple-zulu@1.11.0.png) | ![](plots/quarkus-java-advanced-zulu@1.11.0.png) |\n\n### **(3.3) Payara Micro via Java Runtime**\n\n| Simple                                         | Advanced                                         |\n| ---------------------------------------------- | ------------------------------------------------ |\n| ![](plots/payara-micro-simple-zulu@1.11.0.png) | ![](plots/payara-micro-advanced-zulu@1.11.0.png) |\n\n### **(3.4) Spring Boot via GraalVM Native Image**\n\n| Simple                                        | Advanced                                        |\n| --------------------------------------------- | ----------------------------------------------- |\n| ![](plots/spring-boot-native-simple-ce.png) | ![](plots/spring-boot-native-advanced-ce.png) |\n\n### **(3.5) Spring Boot via Java Runtime**\n\n| Simple                                        | Advanced                                        |\n| --------------------------------------------- | ----------------------------------------------- |\n| ![](plots/spring-boot-simple-zulu@1.11.0.png) | ![](plots/spring-boot-advanced-zulu@1.11.0.png) |\n\n### **(3.6) Python**\n\n| Simple                       | Advanced                       |\n| ---------------------------- | ------------------------------ |\n| ![](plots/python-simple.png) | ![](plots/python-advanced.png) |\n\n## **(4) Used Runtimes, Frameworks and Libraries**\n\n* Quarkus - \u003chttps://quarkus.io\u003e\n* GraalVM - \u003chttps://www.graalvm.org\u003e\n* OpenJ9 - \u003chttps://www.eclipse.org/openj9\u003e\n* OpenJDK RI - \u003chttps://jdk.java.net/java-se-ri/8\u003e\n* Adopt OpenJDK - \u003chttps://adoptopenjdk.net/\u003e\n* Zulu OpenJDK - \u003chttps://www.azul.com/products/zulu-community\u003e\n* Payara Micro - \u003chttps://www.payara.fish\u003e\n* Spring Boot - \u003chttps://spring.io/projects/spring-boot\u003e\n* psrecord - \u003chttps://github.com/astrofrog/psrecord\u003e\n* psutil - \u003chttps://psutil.readthedocs.io\u003e\n* matplotlib - \u003chttps://matplotlib.org\u003e\n* jabba - \u003chttps://github.com/shyiko/jabba\u003e\n* Apache Benchmarking Tool - \u003chttps://httpd.apache.org/docs/2.4/programs/ab.html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmh78%2Fquarkus-performance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frmh78%2Fquarkus-performance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frmh78%2Fquarkus-performance/lists"}