JVM Option ์„ค์ •์— ๋Œ€ํ•˜์—ฌ

JVM (Oracle) Options

-Xms, -Xmx

  • -Xms
    • JVM ์‹œ์ž‘์‹œ์˜ Heap size
  • -Xmx
    • ์ตœ๋Œ€ Heap size

-Xms, -Xmx๋ฅผ ์–ด๋–ป๊ฒŒ ์…‹ํŒ…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ?

  • -Xms, -Xmx๋ฅผ ๋™์ผํ•˜๊ฒŒ ์…‹ํŒ…ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ.
  • Heap ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ๊ธฐ๊ฐ„๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณผ๊ฑฐ์˜ JVM ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ ค์˜ค๋Š” ์„ค์ •๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์˜๊ฒฌ์ด ์žˆ๋‹ค.
  • ์ตœ์‹  JVM์—์„œ๋Š” ์„ค์ •์•ˆํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ํ™•์ธํ•ด๋ด์•ผ ํ•œ๋‹ค.
  • Reference

In very early versions of the adaptive sizing algorithms there may have been some advantage to running with this combination, but for modern workloads itโ€™s almost always counterproductive. If you set this combination, the JVM is constrained in how it can resize and shape the heap, making it less responsive to sudden changes in traffic behavior or request rate.

๊ทธ๋Ÿผ Heap Size๋ฅผ ์–ด๋А ์ •๋„๊นŒ์ง€ ์„ค์ •ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ?

  • 32bit ์šด์˜์ฒด์ œ์ธ ๊ฒฝ์šฐ ์ตœ๋Œ€ Heap Size๋Š” 2^32 = 4GB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 64bit ์šด์˜์ฒด์ œ์ธ ๊ฒฝ์šฐ ์ตœ๋Œ€ Heap Size๋Š” ๊ทธ๋ณด๋‹ค ๋” ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
    • Java์—์„œ๋Š” ๋” ๋งŽ์€ Heapsize์™€ ์ž‘์€ ํฌ์ธํ„ฐ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Compressed Ordinary object pointers๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
    • ์‹ค์ œ๋กœ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ์ฃผ์†Œ์˜ Offset์„ 8์˜ ๋ฐฐ์ˆ˜๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ ํž™์‚ฌ์ด์ฆˆ๋Š” 4GB -> 32GB๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์ตœ๋Œ€ ํž™ ์‚ฌ์ด์ฆˆ๊ฐ€ 32GB๋ฅผ ๋„˜์–ด์„œ๊ฒŒ ๋œ๋‹ค๋ฉด JVM์€ 64bit ๊ธฐ๋ฐ˜์˜ OOP๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ElasticSearch์—์„œ๋Š” ์ตœ๋Œ€ HeapSize๋ฅผ 32GB ์ดํ•˜๋กœ ๊ถŒ์žฅํ•œ๋‹ค.

ํ•ญ์ƒ Heap Size๊ฐ€ ํฌ๋‹ค๊ณ  ์ข‹์€๊ฒƒ์ผ๊นŒ?

  • ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ ๊ฒฝ์šฐ 2GB์˜ ํž™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ 8GB ํฌ๊ธฐ์˜ ํž™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ’€ GC์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์งง์•„ ์‘๋‹ต ๋ฐ˜์‘์„ฑ์— ์œ ๋ฆฌํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ 8GB ํž™์„ ์‚ฌ์šฉํ•˜๋ฉด 2GB๋ณด๋‹ค ํ’€ GC ๋ฐœ์ƒ ๊ฐ„๊ฒฉ์ด ๊ทธ๋งŒํผ ์ค„์–ด๋“ค ๊ฒƒ์ด๊ณ  ๋‚ด๋ถ€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋ฉด ํžˆํŠธ์œจ์„ ๋†’์—ฌ ์‘๋‹ต ๋ฐ˜์‘์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋А ๊ฒƒ์„ ์„ ํƒํ•ด๋„ Trade-off๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ์— ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ์ž.

JVM DNS Cache

  • JVM ๋‚ด๋ถ€์—์„œ๋„ DNS Cache๋ฅผ ํ•œ๋‹ค. DNS ๋ณ€๊ฒฝ์— ๋ฐ”๋กœ ๋ฐ˜์˜์ด ๋˜๋ ค๋ฉด ์บ์‹œ๋ฅผ ์—†์• ๋Š” ํŽธ์ด ์ข‹์•„๋ณด์ธ๋‹ค.
  • networkaddress.cache.ttl
  • sun.net.inetaddr.ttl
    • -1 - ์˜์†์ ์ธ ์บ์‹œ๋ฅผ ์ง€์›ํ•œ๋‹ค.
    • 0 - ์บ์‹œ๋ฅผ ์—†์•ค๋‹ค.

JVM Server ๋ชจ๋“œ

  • -client
    • JIT(Just in time) Compiler๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ๊ฐ„์€ ๋นจ๋ผ์ง€๊ณ  ๋” ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰(foot-print)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋ณดํ†ต GUI ์‹œ์Šคํ…œ, ์ž‘์€ ์‹œ์Šคํ…œ์„ ๊ตฌ๋™ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
  • -sever
    • client ๋ชจ๋“œ๋ณด๋‹ค ๋” ๋งŽ์€ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
    • ๋น ๋ฅธ Operation์ด (์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„)๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ ์ ˆํ•˜๋‹ค.

-XX:MaxPermSize=, -XX:PermSize=

  • JVM 1.8 ์ด์ „์—๋Š” Permanent์˜์—ญ์ด ์กด์žฌํ•˜์˜€๋‹ค.
    • ํ•ด๋‹น ์˜์—ญ์€ Class์˜ Meta ์ •๋ณด, Method์˜ Meta ์ •๋ณด, Static๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
    • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ๋งŽ์€ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์žˆ๋‹ค.
  • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ 1.8 ์ดํ›„๋กœ Deprecated๋˜์—ˆ๋‹ค.

-XX:UseContainerSupport

  • JVM์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CPU์™€ RAM์„ ์ฆ‰ cgroup limits๋ฅผ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.
  • ํ•ด๋‹น ์˜ต์…˜์€ Java 8u191+ ์ดํ›„๋กœ Default๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

JIT Compiler option

-XX:CompileThreshold

  • ํŠน์ • ๋ฉ”์†Œ๋“œ๊ฐ€ ์ผ์ • ํšŸ์ˆ˜ ์žˆ์ƒ ์‹คํ–‰๋˜๋ฉด JIT Compiler๊ฐ€ native ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์€ 1500 / ์ ์ • ์ˆ˜์ค€ 100 ์ด์ƒ
  • ๋„ˆ๋ฌด ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์ฆ๊ฐ€
  • https://www.javacodegeeks.com/2012/10/warming-up-your-jvm-superfast.html

Reference