Tom van der Woerdt created CASSANDRA-15810: ----------------------------------------------
Summary: Default StringTableSize parameter causes GC slowdown Key: CASSANDRA-15810 URL: https://issues.apache.org/jira/browse/CASSANDRA-15810 Project: Cassandra Issue Type: Improvement Reporter: Tom van der Woerdt While looking at tail latency on a Cassandra cluster, it came up that the default StringTableSize in Cassandra is set to a million: {code:java} # Larger interned string table, for gossip's benefit (CASSANDRA-6410) -XX:StringTableSize=1000003{code} This was done for CASSANDRA-6410 by [~jbellis] in '13, to optimize heap usage on a test case, running with 500 nodes and num_tokens=512. Until Java 13, this string table is implemented as native code, and has to be traversed entirely during the GC initial marking phase, which is a STW event. Some testing on my end shows that the pause time of a GC cycle can be reduced by approximately 10 milliseconds if we lower the string table size back to the Java 8 default of 60013 entries. Thus, I would recommend this patch (3.11 branch, similar patch for 4.0): {code:java} diff --git a/conf/jvm.options b/conf/jvm.options index 01bb1685b3..c184d18c5d 100644 --- a/conf/jvm.options +++ b/conf/jvm.options @@ -107,9 +107,6 @@ # Per-thread stack size. -Xss256k -# Larger interned string table, for gossip's benefit (CASSANDRA-6410) --XX:StringTableSize=1000003 - # Make sure all memory is faulted and zeroed on startup. # This helps prevent soft faults in containers and makes # transparent hugepage allocation more effective. {code} It does need some testing on more extreme clusters than I have access to, but I ran some Cassandra nodes with {{-XX:+PrintStringTableStatistics}} which suggested that the Java default will suffice here. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org