No more Xmx! Adaptable Heap Sizing for Containerized Java Applications by Jonathan Joo

Discover how to optimize memory usage in containerized Java applications with Adaptable Heap Sizing, a technique that adjusts JVM heap size based on container RAM usage, reducing GC impact and preventing ooms.

Key takeaways
  • The XMX is often set too high, leading to memory pressure and container ooms.
  • AHS (Adaptable Heap Sizing) allows the JVM heap size to be adjusted based on container RAM usage.
  • The AHS worker thread periodically queries container RAM information and adjusts the JVM heap size accordingly.
  • The goal of AHS is to reduce the impact of GC on the system and prevent container ooms.
  • The target GC CPU overhead percentage is a key tunable in AHS.
  • The AHS algorithm includes several heuristics to guide the JVM heap size adjustments.
  • The AHS tool is designed to be easy to use and automate the heap size adjustments.
  • Google has implemented AHS in production environments and has seen significant memory savings.
  • The AHS algorithm is designed to work with G1 and other garbage collectors.
  • The current max expansion size flag is a safeguard to prevent the JVM heap from growing too large.
  • Proposed heap size is a feature that can be used to further customize the JVM heap size.
  • The AHS worker thread is flexible and can be made to fit the needs of the system.
  • The AHS algorithm takes into account other heuristics when making heap size adjustments.
  • The goal of AHS is to reduce the impact of GC on the system and prevent container ooms.
  • The AHS tool is designed to be easy to use and automate the heap size adjustments.