[ https://issues.apache.org/jira/browse/CASSANDRA-15810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17176835#comment-17176835 ]
Robert Stupp commented on CASSANDRA-15810: ------------------------------------------ ISTM that it's better to remove the only usage of {{String.intern()}} in {{org.apache.cassandra.gms.VersionedValue#VersionedValue(java.lang.String)}} and the {{-XX:StringTableSize}} JVM argument entirely. [~benedict] WDYT? There's [evidence|https://shipilev.net/jvm/anatomy-quarks/10-string-intern/] that String-interning can cause GC and performance issues. > Default StringTableSize parameter causes GC slowdown > ---------------------------------------------------- > > Key: CASSANDRA-15810 > URL: https://issues.apache.org/jira/browse/CASSANDRA-15810 > Project: Cassandra > Issue Type: Improvement > Components: Local/Config > Reporter: Tom van der Woerdt > Priority: Normal > Labels: gc, performance > > 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