[ 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