You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Brad Schoening (Jira)" <ji...@apache.org> on 2024/07/12 13:50:00 UTC

[jira] [Commented] (CASSANDRA-17655) Prevent JVM Humongous allocations

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

Brad Schoening commented on CASSANDRA-17655:
--------------------------------------------

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
>            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-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org