From 255a96f03943f0f06bbad9b31a3285ee67624b13 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Thu, 1 Jul 2021 01:18:51 +0300 Subject: [PATCH] [Broker/Bookie] Set -Dio.netty.tryReflectionSetAccessible=true for pulsar processes (#11138) - allows Netty to use reflection access on JDK9+ - fixes `jvm_memory_direct_bytes_used` Prometheus metric for Bookkeeper (Bookie). The direct memory usage metrics are disabled in Bookie on JDK11 unless `-Dio.netty.tryReflectionSetAccessible=true` is used. - enables Netty to use more efficient byte buffer implementation such as UnpooledUnsafeNoCleanerDirectByteBuf in JDK9+ (JDK 11 in this case). This is already used in JDK8. In JDK9+, it is necessary to set `-Dio.netty.tryReflectionSetAccessible=true` to use UnpooledUnsafeNoCleanerDirectByteBuf. This is necessary for preventing performance regressions in this area. - pass `-Dio.netty.tryReflectionSetAccessible=true` JVM option by default to all pulsar process started with `bin/pulsar` script. (cherry picked from commit f0cbcb5f53d7ff3eda1c4da0a993513647fc81cb) --- bin/bookkeeper | 3 +++ bin/function-localrunner | 3 +++ bin/pulsar | 3 +++ pom.xml | 1 + 4 files changed, 10 insertions(+) diff --git a/bin/bookkeeper b/bin/bookkeeper index 57435d9089b05..65e3cb449299e 100755 --- a/bin/bookkeeper +++ b/bin/bookkeeper @@ -161,6 +161,9 @@ BOOKIE_CLASSPATH="$BOOKIE_JAR:$BOOKIE_CLASSPATH:$BOOKIE_EXTRA_CLASSPATH" BOOKIE_CLASSPATH="`dirname $BOOKIE_LOG_CONF`:$BOOKIE_CLASSPATH" OPTS="$OPTS -Dlog4j.configurationFile=`basename $BOOKIE_LOG_CONF`" +# Allow Netty to use reflection access +OPTS="$OPTS -Dio.netty.tryReflectionSetAccessible=true" + OPTS="-cp $BOOKIE_CLASSPATH $OPTS" OPTS="$OPTS $BOOKIE_EXTRA_OPTS" diff --git a/bin/function-localrunner b/bin/function-localrunner index fb36eb20383ce..09f1db94005a7 100755 --- a/bin/function-localrunner +++ b/bin/function-localrunner @@ -21,6 +21,9 @@ BINDIR=$(dirname "$0") export PULSAR_HOME=`cd -P $BINDIR/..;pwd` . "$PULSAR_HOME/bin/pulsar-admin-common.sh" +# Allow Netty to use reflection access +OPTS="$OPTS -Dio.netty.tryReflectionSetAccessible=true" + # functions related variables FUNCTIONS_HOME=$PULSAR_HOME/pulsar-functions diff --git a/bin/pulsar b/bin/pulsar index 1e8439ea77013..1f50140032107 100755 --- a/bin/pulsar +++ b/bin/pulsar @@ -279,6 +279,9 @@ OPTS="$OPTS -Dlog4j.configurationFile=`basename $PULSAR_LOG_CONF`" # directory) OPTS="$OPTS -Djute.maxbuffer=10485760 -Djava.net.preferIPv4Stack=true" +# Allow Netty to use reflection access +OPTS="$OPTS -Dio.netty.tryReflectionSetAccessible=true" + OPTS="-cp $PULSAR_CLASSPATH $OPTS" if [ $COMMAND == "bookie" ]; then diff --git a/pom.xml b/pom.xml index 7aadd738b5584..9558eefff7152 100644 --- a/pom.xml +++ b/pom.xml @@ -1132,6 +1132,7 @@ flexible messaging model and an intuitive client API. -Dpulsar.allocator.leak_detection=Advanced -Dpulsar.allocator.exit_on_oom=false -Dlog4j.configurationFile=log4j2.xml + -Dio.netty.tryReflectionSetAccessible=true ${test.additional.args} ${testReuseFork}