JVM Parameter Tuning for a Service Handling 10 Million Daily Login Requests on an 8 GB Node
This article walks through a systematic approach to sizing and configuring JVM parameters—including heap, young generation, GC algorithm, Metaspace, and safety‑point settings—for a high‑traffic login service that receives one million requests per day on a server with 8 GB of memory, providing both practical code examples and interview‑style explanations.
In a recent interview question, a candidate was asked how to configure JVM parameters for a platform that processes 1 million login requests per day on a service node with 8 GB of memory. The answer is broken down into eight detailed steps that cover capacity planning, garbage‑collector selection, memory partitioning, and runtime safety settings.
Step 1 – Capacity Planning
Estimate per‑second request volume (≈100 requests/s at peak) and calculate the memory needed for objects created each second. Assuming each login object occupies ~500 bytes and the request flow generates a few hundred kilobytes to a megabyte per second, you can infer the required young‑generation size and the frequency of Minor GC pauses.
Step 2 – Choosing a Garbage Collector
Decide between throughput‑oriented and latency‑oriented collectors. For low‑latency services, the CMS collector (or its successor G1) is recommended; for high‑throughput, large‑heap workloads, G1 is preferred. The article provides a comparison table of CMS phases and their STW characteristics.
Step 3 – Partitioning Heap Regions
Set -Xms and -Xmx to half of the physical memory (≈4 GB) to leave room for the OS. Allocate the young generation with -Xmn (e.g., 2 GB) and adjust the survivor ratio (e.g., -XX:SurvivorRatio=8) so that Eden:Survivor:Old = 8:1:1. This yields roughly 1.6 GB Eden, 0.2 GB each survivor space.
Step 4 – Stack Size
Configure thread stack size with -Xss1M; large thread pools may consume hundreds of megabytes of stack memory.
Step 5 – Object Age Threshold
Reduce the default tenuring threshold (e.g., -XX:MaxTenuringThreshold=5) so objects survive only a few Minor GC cycles before promotion, preventing survivor overflow.
Step 6 – Large Object Allocation
Directly allocate objects larger than 1 MB in the old generation using -XX:PretenureSizeThreshold=1M.
Step 7 – CMS Tuning (or G1)
For CMS, enable -XX:CMSInitiatingOccupancyFraction=70 and -XX:+UseCMSInitiatingOccupancyOnly to start collection early, and use -XX:+AlwaysPreTouch to pre‑allocate memory. For G1, set -XX:MaxGCPauseMillis=150 and avoid explicit young‑generation sizing.
Step 8 – OOM and GC Logging
Enable heap dumps on OOM ( -XX:+HeapDumpOnOutOfMemoryError) and configure GC logs (
-Xloggc:/path/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps) for post‑mortem analysis.
Metaspace (Former Permanent Generation)
Since Java 8, class metadata resides in Metaspace, which grows dynamically with native memory. Use -XX:MetaspaceSize and -XX:MaxMetaspaceSize to control its initial and maximum size, avoiding the classic PermGen OOM.
Safepoints and OopMap
Garbage collection requires all Java threads to stop at safepoints. The JVM records reference locations in an OopMap generated at class‑load time and at specific bytecode positions (loop ends, method returns, exception throws) to safely update object references during STW pauses.
Overall, the article provides a reusable JVM‑parameter template for a 4 CPU × 8 GB server using ParNew + CMS (latency‑first) or G1 (throughput‑first), explains the rationale behind each flag, and emphasizes that architectural and code‑level optimizations should precede JVM tuning.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Top Architect
Top Architect focuses on sharing practical architecture knowledge, covering enterprise, system, website, large‑scale distributed, and high‑availability architectures, plus architecture adjustments using internet technologies. We welcome idea‑driven, sharing‑oriented architects to exchange and learn together.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
