[ 
https://issues.apache.org/jira/browse/CASSANDRA-17655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17865486#comment-17865486
 ] 

Brad Schoening edited comment on CASSANDRA-17655 at 7/12/24 1:59 PM:
---------------------------------------------------------------------

The below code can be used to cause humongous allocations in a generic Java JVM.

{code:java}
public class HumongousAllocation {
    public static void main(String[] args {
        // Define the size of the allocation
        // For example, to allocate a 1GB byte array
        int size = 1024 * 1024 * 1024; // 1 GB
        
        // Allocate the humongous object
        byte[] humongousArray = new byte[size];
        
        // Fill the array to ensure allocation
        for (int i = 0; i < size; i++) {
            humongousArray[i] = 1;
        }
        
        System.out.println("Humongous allocation done!");
    }
}
{code}

{code:java}
java -Xmx2G HumongousAllocation
{code}

Looking to see if the memory pools available in JMX will report on humongous 
allocations.  The only way to see it currently is enable and look at gc.log.



was (Author: bschoeni):
The below code can be used to cause humongous allocations in a Java JVM.

{code:java}
public class HumongousAllocation {
    public static void main(String[] args {
        // Define the size of the allocation
        // For example, to allocate a 1GB byte array
        int size = 1024 * 1024 * 1024; // 1 GB
        
        // Allocate the humongous object
        byte[] humongousArray = new byte[size];
        
        // Fill the array to ensure allocation
        for (int i = 0; i < size; i++) {
            humongousArray[i] = 1;
        }
        
        System.out.println("Humongous allocation done!");
    }
}
{code}

{code:java}
java -Xmx2G HumongousAllocation
{code}




> Prevent JVM Humongous allocations
> ---------------------------------
>
>                 Key: CASSANDRA-17655
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-17655
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Local/Other
>            Reporter: Brad Schoening
>            Priority: Normal
>
> Several articles on Cassandra note that certain workloads, especially large 
> partitions, can cause humongous allocations in Java, which can be reduced, 
> but not always eliminated by increasing RegionSize.  RegionSize max is 32MB.  
> Humongous allocations are an undesirable performance issue because new 
> objects get directly allocated in old space.
> Below is a sample message seen in the gc.log
> 2022-05-23T18:46:58.743+0800: 3758624.170: [GC pause (G1 Humongous 
> Allocation) (young) (initial-mark) 3758624.171: [G1Ergonomics (CSet 
> Construction) start choosing CSet, _pending_cards: 56725, predicted base 
> time: 39.83 ms, remaining time: 160.17 ms, target pause time: 200.00 ms]
> Instead of Cassandra users tuning RegionSize manually, a better solution 
> would be for Cassandra to limit the size of allocations, or consider moving 
> humongous allocations off heap.
>  
> References
> [https://docs.oracle.com/en/java/javase/11/gctuning/garbage-first-g1-garbage-collector1.html#GUID-D74F3CC7-CC9F-45B5-B03D-510AEEAC2DAC]
> [https://stevenlacerda.medium.com/identifying-and-fixing-humongous-allocations-in-cassandra-bf46444cec41]
> https://krzysztofslusarski.github.io/2020/11/10/humongous.html



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to