In Cassandra, Heap size is the amount of memory allocated on RAM.
If using CMS, uncomment and set the new generation heap size to tune the heap for CMS.
As a starting point, set the new parameter to 100 MB per physical CPU core. For example, for a modern eight-core or greater system:
A larger size leads to longer GC (Garbage collection) pause times. For a smaller new size, GC pauses are shorter but usually more expensive.
By default, DataStax Enteprise (DSE) sets the Java Virtual Machine (JVM) heap size from 1 to 32 GB depending on the amount of RAM and type of Java installed. The cassandra-env.sh automatically configures the min and max size to the same value using the following formula:
max(min(1/2 ram, 1024 megabytes), min(1/4 ram, 32765 megabytes))
To adjust the JVM heap size, uncomment and set the below parameters in the jvm.options file:
- Minimum (
- Maximum (
- New generation (
- Parallel processing for GC (
Restriction: When overriding the default setting, both min and max must be defined the jvm.options file.
Guidelines and recommendations
Setting the Java heap higher than 32 GB may interfere with the OS page cache. Operating systems that maintain the OS page cache for frequently accessed data are very good at keeping this data in memory. Properly tuning the OS page cache usually results in better performance than increasing the row cache.
For production use, follow these guidelines to adjust heap size for your environment:
- Heap size is usually between ¼ and ½ of system memory but not larger than 32 GB.
- Reserve enough memory for the offheap cache and file system cache.
- Enable GC logging when adjusting GC (Garbage collection).
- Gradually increase or decrease the parameters. Test each incremental change.
- Enable parallel processing for GC, particularly when using DSE Search.
- The GCInspector class logs information about any garbage collection that takes longer than 200 ms. Garbage collections that occur frequently and take a moderate length of time (seconds) to complete indicate excessive garbage collection pressure on the JVM.
- For a node using G1, DataStax recommends a
MAX_HEAP_SIZEas large as possible, up to 64 GB.
Maximum and minimum heap size :
The recommended maximum heap size depends on which GC is used:
|Hardware setup||Recommended MAX_HEAP_SIZE|
|G1 for newer computers (8+ cores) with up to 256 GB RAM||16 GB to 32 GB|
|CMS for newer computers (8+ cores) with up to 256 GB RAM||No more than 16 GB|
|Older computers||Typically 8 GB|
==> To enable GC logging, uncomment the
loggc parameter in the jvm.options file.
==> Set the heap sizes in the jvm.options file:
Set the min (-Xms) and max (-Xmx) heap sizes to the same value to avoid stop-the-world GC pauses during resize, and to lock the heap in memory on startup which prevents any of it from being swapped out.