From 1ba83e715b9ca80dbbb4afd1c54d24ed7cf1ebc8 Mon Sep 17 00:00:00 2001 From: Bugra Eryilmaz Date: Mon, 20 May 2024 21:26:55 +0200 Subject: [PATCH] jvm11 options fix --- benchmarks/data-serving/server/Dockerfile | 1 + .../data-serving/server/docker-entrypoint.py | 40 ------- .../data-serving/server/jvm11-server.options | 108 ++++++++++++++++++ 3 files changed, 109 insertions(+), 40 deletions(-) create mode 100644 benchmarks/data-serving/server/jvm11-server.options diff --git a/benchmarks/data-serving/server/Dockerfile b/benchmarks/data-serving/server/Dockerfile index 2b8af1aad..d4b47a3d8 100644 --- a/benchmarks/data-serving/server/Dockerfile +++ b/benchmarks/data-serving/server/Dockerfile @@ -3,6 +3,7 @@ FROM cloudsuite/cassandra:4.1.0 RUN apt update && apt install -y --no-install-recommends python3-yaml && rm -rf /var/lib/apt/lists/* COPY docker-entrypoint.py / +COPY jvm11-server.options /etc/cassandra/jvm11-server.options ENTRYPOINT ["/docker-entrypoint.py"] diff --git a/benchmarks/data-serving/server/docker-entrypoint.py b/benchmarks/data-serving/server/docker-entrypoint.py index b6f535965..1d60f7252 100755 --- a/benchmarks/data-serving/server/docker-entrypoint.py +++ b/benchmarks/data-serving/server/docker-entrypoint.py @@ -43,10 +43,6 @@ def get_ip(): if not path.exists(f"{CASSANDRA_CONFIG}/jvm-server.options.bak"): shutil.copy(f"{CASSANDRA_CONFIG}/jvm-server.options", f"{CASSANDRA_CONFIG}/jvm-server.options.bak") -if not path.exists(f"{CASSANDRA_CONFIG}/jvm11-server.options.bak"): - shutil.copy(f"{CASSANDRA_CONFIG}/jvm11-server.options", f"{CASSANDRA_CONFIG}/jvm11-server.options.bak") - - # Now, modify the cassandra.yaml with open(f"{CASSANDRA_CONFIG}/cassandra.yaml") as f: config = yaml.safe_load(f) @@ -102,41 +98,5 @@ def get_ip(): with open(f"{CASSANDRA_CONFIG}/jvm-server.options", "w") as f: f.writelines(jvm_options) -# Then, process the jvm11.options -with open(f"{CASSANDRA_CONFIG}/jvm11-server.options") as f: - jvm11_options = f.readlines() - -for idx, l in enumerate(jvm11_options): - # Disable CMS Garbage Collection - if l.startswith("-XX:+UseConcMarkSweepGC"): - jvm11_options[idx] = "" - if l.startswith("-XX:+CMSParallelRemarkEnabled"): - jvm11_options[idx] = "" - if l.startswith("-XX:SurvivorRatio"): - jvm11_options[idx] = "" - if l.startswith("-XX:MaxTenuringThreshold"): - jvm11_options[idx] = "" - if l.startswith("-XX:CMSInitiatingOccupancyFraction"): - jvm11_options[idx] = "" - if l.startswith("-XX:+UseCMSInitiatingOccupancyOnly"): - jvm11_options[idx] = "" - if l.startswith("-XX:CMSWaitDuration"): - jvm11_options[idx] = "" - if l.startswith("-XX:+CMSParallelInitialMarkEnabled"): - jvm11_options[idx] = "" - if l.startswith("-XX:+CMSEdenChunksRecordAlways"): - jvm11_options[idx] = "" - if l.startswith("-XX:+CMSClassUnloadingEnabled"): - jvm11_options[idx] = "" - # Add G1 Garbage Collection - jvm11_options.append("-XX:+UseG1GC\n") - jvm11_options.append("-XX:+ParallelRefProcEnabled\n") - # Add PreserveFramePointer for flamegraph - jvm11_options.append("-XX:+PreserveFramePointer\n") - -# Write it back -with open(f"{CASSANDRA_CONFIG}/jvm11-server.options", "w") as f: - f.writelines(jvm11_options) - os.execvp("cassandra", ["cassandra", "-R", "-f"]) diff --git a/benchmarks/data-serving/server/jvm11-server.options b/benchmarks/data-serving/server/jvm11-server.options new file mode 100644 index 000000000..31ecc14bb --- /dev/null +++ b/benchmarks/data-serving/server/jvm11-server.options @@ -0,0 +1,108 @@ +########################################################################### +# jvm11-server.options # +# # +# See jvm-server.options. This file is specific for Java 11 and newer. # +########################################################################### + +################# +# GC SETTINGS # +################# + + + +### CMS Settings +#-XX:+UseConcMarkSweepGC +#-XX:+CMSParallelRemarkEnabled +#-XX:SurvivorRatio=8 +#-XX:MaxTenuringThreshold=1 +#-XX:CMSInitiatingOccupancyFraction=75 +#-XX:+UseCMSInitiatingOccupancyOnly +#-XX:CMSWaitDuration=10000 +#-XX:+CMSParallelInitialMarkEnabled +#-XX:+CMSEdenChunksRecordAlways +## some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541 +#-XX:+CMSClassUnloadingEnabled + + + +### G1 Settings +## Use the Hotspot garbage-first collector. +-XX:+UseG1GC +-XX:+ParallelRefProcEnabled + +# +## Have the JVM do less remembered set work during STW, instead +## preferring concurrent GC. Reduces p99.9 latency. +#-XX:G1RSetUpdatingPauseTimePercent=5 +# +## Main G1GC tunable: lowering the pause target will lower throughput and vise versa. +## 200ms is the JVM default and lowest viable setting +## 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. +#-XX:MaxGCPauseMillis=500 + +## Optional G1 Settings +# Save CPU time on large (>= 16GB) heaps by delaying region scanning +# until the heap is 70% full. The default in Hotspot 8u40 is 40%. +#-XX:InitiatingHeapOccupancyPercent=70 + +# For systems with > 8 cores, the default ParallelGCThreads is 5/8 the number of logical cores. +# Otherwise equal to the number of cores when 8 or less. +# Machines with > 10 cores should try setting these to <= full cores. +#-XX:ParallelGCThreads=16 +# By default, ConcGCThreads is 1/4 of ParallelGCThreads. +# Setting both to the same value can reduce STW durations. +#-XX:ConcGCThreads=16 + + +### JPMS + +-Djdk.attach.allowAttachSelf=true +--add-exports java.base/jdk.internal.misc=ALL-UNNAMED +--add-exports java.base/jdk.internal.ref=ALL-UNNAMED +--add-exports java.base/sun.nio.ch=ALL-UNNAMED +--add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED +--add-exports java.sql/java.sql=ALL-UNNAMED + +--add-opens java.base/java.lang.module=ALL-UNNAMED +--add-opens java.base/jdk.internal.loader=ALL-UNNAMED +--add-opens java.base/jdk.internal.ref=ALL-UNNAMED +--add-opens java.base/jdk.internal.reflect=ALL-UNNAMED +--add-opens java.base/jdk.internal.math=ALL-UNNAMED +--add-opens java.base/jdk.internal.module=ALL-UNNAMED +--add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED +--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED + + +### GC logging options -- uncomment to enable + +# Java 11 (and newer) GC logging options: +# See description of https://bugs.openjdk.java.net/browse/JDK-8046148 for details about the syntax +# The following is the equivalent to -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M +#-Xlog:gc=info,heap*=trace,age*=debug,safepoint=info,promotion*=trace:file=/var/log/cassandra/gc.log:time,uptime,pid,tid,level:filecount=10,filesize=10485760 + +# Notes for Java 8 migration: +# +# -XX:+PrintGCDetails maps to -Xlog:gc*:... - i.e. add a '*' after "gc" +# -XX:+PrintGCDateStamps maps to decorator 'time' +# +# -XX:+PrintHeapAtGC maps to 'heap' with level 'trace' +# -XX:+PrintTenuringDistribution maps to 'age' with level 'debug' +# -XX:+PrintGCApplicationStoppedTime maps to 'safepoint' with level 'info' +# -XX:+PrintPromotionFailure maps to 'promotion' with level 'trace' +# -XX:PrintFLSStatistics=1 maps to 'freelist' with level 'trace' + +### Netty Options + +# On Java >= 9 Netty requires the io.netty.tryReflectionSetAccessible system property to be set to true to enable +# creation of direct buffers using Unsafe. Without it, this falls back to ByteBuffer.allocateDirect which has +# inferior performance and risks exceeding MaxDirectMemory +-Dio.netty.tryReflectionSetAccessible=true + +### Preserve Frame pointer for flamegraph +-XX:+PreserveFramePointer + +# The newline in the end of file is intentional + +