We are happy to announce the release of Alpaquita Containers with Alpaquita Linux, Liberica JDK, and support for the OpenJDK Coordinated Restore at Checkpoint (CRaC) API.
Ready-to-use container images will enable the developers to seamlessly integrate CRaC into their projects.
The solution is available for JDK 17 and 21 and x86_64 architecture, with ARM support coming later in 2024.
Get Alpaquita Containers with CRaC
Table of Contents
Smaller instances and higher availability with CRaC
Typical enterprise Java applications take several minutes to reach stable peak performance (i.e., to warm up). In addition, they tend to consume more resources during warmup than they actually need for stable operation. As a result,
- You overpay for cloud resources by allocating more memory to your instances than they actually need.
- Cloud expenses increase even more because you pay for CPU cycles during warmup.
- During the warmup, instances don’t process client requests, increasing latency and user dissatisfaction.
Coordinated Restore at Checkpoint is an OpenJDK API aimed at solving these issues by providing the developers with the ability to start up their instances at peak performance.
Find out more about the aspects of the CRaC API in our What is CRaC? article.
Alpaquita Containers with CRaC provide up to 164x faster startup and 1.1x smaller images
We measured the performance of Alpaquita Containers with CRaC support using the Spring Boot Petclinic application, and the results for startup and footprint reduction are quite impressive!
Experimental setup:
- CPU: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz,
- JDK: Liberica JDK 21,
- OS: Alpaquita Linux with glibc,
- GC implementation and heap size: G1 GC (-Xms512m -Xmx512m).
In terms of startup, the tests yielded the reduction of startup (i.e., time to first operation) from 4935 ms to 30 ms.
Spring Boot Petclinic and Alpaquita Containers with CRaC: startup study results
Similar results are observed with ParallelGC and ShenandoahGC.
As far as the CRaC image reduction is concerned, we measured Resident Set Size (RSS) before the checkpoint, after restore, and after a number of requests. We can see that the RSS before the dump is larger than the RSS after the checkpoint. After the first request, the RSS increases and reaches some steady state. However, it is still less than the original RSS before the checkpoint. The RSS reduction is achieved thanks to the following factors:
- Liberica JDK with CRaC performs Full Garbage Collection before the checkpoint, freeing some pages.
- While criu, the executable used by Liberica JDK with CRaC for dumping, is running, some pages belonging to the Java Virtual Machine or used by system libraries may not be used after recovery. These memory pages can still be used by the libraries or JVM, but they are only reserved for future use after restoring.
- HotSpot VM returns part of native memory to the OS (including pages that were freed during GC).
As a result, the size of the generated CRaC image in our case was reduced from 613 MB to 190 MB right after restore. When the application started processing requests, the image size grew to 381 MB after 10,000 requests. The image size didn’t change afterwards. So the general reduction by 1.1x times is still tangible.
Spring Boot Petclinic and Alpaquita Containers with CRaC: image footprint study results
Note that the RSS reduction is load-specific and may be different in case of other applications.
Therefore, implementing Alpaquita Containers with CRaC to your Java workloads will enable you to
- Create instances fitting your application perfectly and not overpay for resources that you don’t use.
- Minimize latency and process more client requests from the start.
- Scale efficiently by adding the exact amount of instances and memory your application needs to manage the increased load.
“Plug-and-play” CRaC experience with Alpaquita Containers
BellSoft has already released Liberica JDK builds with CRaC API support in November 2023. But why is it important to have a ready container image with CRaC support?
The CRaC API is not pure OpenJDK code, it relies on the CRIU (Checkpoint and Restore in Userspace) technology found in Linux-based operating systems.
BellSoft developed Alpaquita Containers so that developers can use CRaC with their projects without additionally adjusting Java or the OS.
Alpaquita Containers include
- Liberica JDK 17 or 21, an OpenJDK distribution recommended by Spring, with CRaC API support, and
- Alpaquita Linux, a lightweight Alpine-inspired distribution offering two flavors, with optimized musl or glibc.
Download Alpaquita Containers with CRaC support now!
Alpaquita Containers are free to use. BellSoft’s Docker Hub repository contains a variety of images with CRaC support, so you can choose the perfect one for your workloads. Documentation on Alpaquita Containers contains detailed information on choosing, pulling, and using images. To get started with the feature, read our tutorial on using CRaC with Spring Boot or consult our engineers, and we’ll be happy to help!