
Learn how GKE VerticalPodAutoscaler (VPA) CPU Startup Boost cuts JVM cold starts and eliminates ongoing CPU waste using in-place Pod resizing.
title: Accelerating JVM startup on GKE: How VPA CPU startup boost eliminates ongoing resource waste published: true description: Learn how GKE VerticalPodAutoscaler (VPA) CPU Startup Boost cuts JVM cold starts and eliminates ongoing CPU waste using in-place Pod resizing. tags: kubernetes, ai, gke, googlecloud cover_image: https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/6k5609jts5b2pf25u5iw.png
Running Java and other JVM-based workloads in Kubernetes has long presented an infrastructure sizing challenge. During initialization, JVM applications require substantial CPU capacity to perform class loading, bytecode verification, framework dependency injection, and Just-In-Time (JIT) compilation. Once this initialization phase finishes, steady-state CPU consumption frequently drops by 50% to 80%.
To avoid slow startups and ensure new Pods pass readiness probes quickly, platform teams have historically over-provisioned CPU requests permanently. This compromise introduces persistent CPU waste—unutilized allocations that inflate infrastructure spend and degrade workload packing density on worker nodes.
To resolve this trade-off, the GKE team launched the Public Preview of VerticalPodAutoscaler (VPA) CPU Startup Boost. Available on GKE clusters running version 1.36.0-gke.4447000 or newer in the Rapid Channel, this feature provides up to 2x faster startup latency while dynamically reclaiming CPU capacity once the application stabilizes.
In this article, I will explain how CPU startup boost operates under the hood, how it leverages Kubernetes In-Place Pod Resize (IPPR), and how to configure it effectively for your clusters.
When configuring CPU requests for a container, Kubernetes uses that value for scheduling decisions and CPU bandwidth enforcement through CFS quotas. If you rightsize a Java container for its steady-state requirement—say, 500m CPU—the application may experience severe CPU throttling during boot, stretching startup times from seconds into minutes.
Slow startups create cascading operational challenges:
CPU startup boost solves this by providing temporary CPU headroom during initialization, then reducing the allocation back to baseline without restarting the Pod.
The CPU startup boost lifecycle executes across three distinct phases:
vpaCpuStartupBoost/<container-name>) before the scheduler places the Pod.Ready status, the configured durationSeconds timer begins. When the duration expires, the VPA Updater initiates an in-place resize back to baseline.Because GKE utilizes Kubernetes In-Place Pod Resize (IPPR), this downscale happens live. The container is never terminated or restarted when the boost ends.
You configure CPU startup boost directly inside a standard VerticalPodAutoscaler Custom Resource. You can use VPA exclusively for startup boost or combine it with continuous autoscaling.
If you manage steady-state resource requests manually in your Deployment manifest, set updateMode: "Off" in the VPA policy:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: java-app-startup-boost
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: customer-service
updatePolicy:
updateMode: "Off"
startupBoost:
cpu:
type: Factor
factor: 2
durationSeconds: 10
In this manifest:
type: Factor: Multiplies the baseline CPU request (doubling 1 vCPU to 2 vCPUs during startup). You can also specify type: Quantity with a fixed addition like quantity: "2".durationSeconds: 10: Keeps boosted CPU active for 10 seconds after the Pod reaches Ready state before reclaiming the resource.For multi-container Pods containing sidecars, you can isolate the boost to the primary application container using containerPolicies:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: java-app-advanced-boost
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: payment-service
updatePolicy:
updateMode: InPlaceOrRecreate
resourcePolicy:
containerPolicies:
- containerName: app-server
mode: Auto
startupBoost:
cpu:
type: Quantity
quantity: "2"
durationSeconds: 0
- containerName: envoy-proxy
mode: "Off"
startupBoost:
cpu:
type: Factor
factor: 1
Setting updateMode: InPlaceOrRecreate allows GKE to boost startup resources, return to baseline, and then continue evaluating ongoing usage to rightsize the workload over time.
When adopting CPU startup boost across your clusters, keep the following operational rules in mind:
readinessProbe and set durationSeconds: 0. This configuration ensures the Pod unboosts immediately upon becoming ready, preventing startup CPU spikes from triggering false scale-out events.You can confirm that startup boost is active by inspecting Pod annotations and cluster events with kubectl:
# Check for the tracking annotation injected at admission
kubectl get pod <pod-name> -o jsonpath='{.metadata.annotations.vpaCpuStartupBoost/*}'
# Observe the in-place downscale event after readiness
kubectl get events --field-selector reason=InPlaceResizedByVPA
The InPlaceResizedByVPA event confirms that the container returned to baseline requests without a restart.
VPA CPU Startup Boost eliminates a longstanding trade-off in Kubernetes workload sizing, helping Java microservices start faster while cutting idle resource costs.
To start testing startup boost on your GKE clusters, review the official GKE CPU startup boost documentation and explore Vertical Pod Autoscaling in GKE.
flutterDiscover how CubitSignalMixin and BlocSignalMixin allow any existing Flutter controller, domain repository, or enterprise class to gain full reactive state container capabilities without occupying its single inheritance slot.
googleappsscriptBreaking the Limits of GAS with Direct Cloud-to-Cloud Streaming in Persistent Linux...
flutterDiscover why Flutter state management is no longer an all-or-nothing choice. Explore how BlocSignal, Classic BLoC, and Riverpod now operate as first-class bidirectional peers at the Grand Central State Terminal.
kubernetesLearn how to troubleshoot and audit GKE Vertical Pod Autoscaler actions with structured decision logs in Cloud Logging.
aiIf you've built a website with AI recently, there is a good chance it looks familiar. Maybe you have...
gemmaThis article is about running a hand-written Gemma 4 port in pure JAX on three different...
Workflows from the Neura Market marketplace related to this Stable Diffusion resource