diff options
-rwxr-xr-x | config-proxy/src/main/sh/vespa-config-ctl.sh | 7 | ||||
-rwxr-xr-x | configserver/src/main/sh/start-configserver | 9 | ||||
-rwxr-xr-x | container-disc/src/main/sh/vespa-start-container-daemon.sh | 2 | ||||
-rwxr-xr-x | logserver/bin/logserver-start.sh | 4 | ||||
-rwxr-xr-x | standalone-container/src/main/sh/standalone-container.sh | 9 | ||||
-rwxr-xr-x | vespabase/src/common-env.sh | 29 |
6 files changed, 53 insertions, 7 deletions
diff --git a/config-proxy/src/main/sh/vespa-config-ctl.sh b/config-proxy/src/main/sh/vespa-config-ctl.sh index 8f2e6a44563..1fa7e31de14 100755 --- a/config-proxy/src/main/sh/vespa-config-ctl.sh +++ b/config-proxy/src/main/sh/vespa-config-ctl.sh @@ -109,7 +109,12 @@ case $1 in nohup nice sbin/vespa-retention-enforcer > ${LOGDIR}/vre-start.log 2>&1 </dev/null & configsources=`bin/vespa-print-default configservers_rpc` userargs=$VESPA_CONFIGPROXY_JVMARGS - jvmopts="-Xms32M -Xmx128M -XX:+PreserveFramePointer -XX:+UseTransparentHugePages -XX:CompressedClassSpaceSize=32m -XX:MaxDirectMemorySize=32m -XX:ThreadStackSize=448 -XX:MaxJavaStackTraceDepth=1000 -XX:-OmitStackTraceInFastThrow" + # Note that the hardcoded memory Xmx=128 migh be overriden in VESPA_CONFIGPROXY_JVMARGS, + # hence rendering get_jvm_hugepage_settings incorrect, but it is better than not. + # TODO Better way of extracting heap size arguments. + heap_min=32 + heap_max=128 + jvmopts="-Xms$(heap_min)M -Xmx$(heap_max)M -XX:+PreserveFramePointer $(get_jvm_hugepage_settings $heap_max) -XX:CompressedClassSpaceSize=32m -XX:MaxDirectMemorySize=32m -XX:ThreadStackSize=448 -XX:MaxJavaStackTraceDepth=1000 -XX:-OmitStackTraceInFastThrow" VESPA_SERVICE_NAME=configproxy export VESPA_SERVICE_NAME diff --git a/configserver/src/main/sh/start-configserver b/configserver/src/main/sh/start-configserver index 6cf668e346a..3f02ff1cc27 100755 --- a/configserver/src/main/sh/start-configserver +++ b/configserver/src/main/sh/start-configserver @@ -161,10 +161,15 @@ rm -f $cfpfile vespa-run-as-vespa-user sh -c "printenv > $cfpfile" fixddir $bundlecachedir +# Note that the hardcoded memory Xmx=2048 migh be overridden by jvmargs, +# hence rendering get_jvm_hugepage_settings incorrect, but it is better than not. +# TODO Better way of extracting heap size arguments. +heap_min=128 +heap_max=2048 vespa-run-as-vespa-user vespa-runserver -s ${VESPA_SERVICE_NAME} -r 30 -p $pidfile -- \ java \ - -Xms128m -Xmx2048m \ - -XX:+UseTransparentHugePages \ + -Xms$(heap_min)m -Xmx$(heap_max)m \ + $(get_jvm_hugepage_settings $heap_max) \ -XX:+PreserveFramePointer \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath="${VESPA_HOME}/var/crash" \ diff --git a/container-disc/src/main/sh/vespa-start-container-daemon.sh b/container-disc/src/main/sh/vespa-start-container-daemon.sh index 76d3f5e3c68..b27e02b6c23 100755 --- a/container-disc/src/main/sh/vespa-start-container-daemon.sh +++ b/container-disc/src/main/sh/vespa-start-container-daemon.sh @@ -174,7 +174,7 @@ configure_memory() { memory_options="-Xms${jvm_minHeapsize}m -Xmx${jvm_heapsize}m" memory_options="${memory_options} -XX:ThreadStackSize=${jvm_stacksize}" memory_options="${memory_options} -XX:MaxDirectMemorySize=${maxDirectMemorySize}m" - memory_options="${memory_options} -XX:+UseTransparentHugePages" + memory_options="${memory_options} $(get_jvm_hugepage_settings $jvm_heapsize)" if ((jvm_compressedClassSpaceSize != 0)); then memory_options="${memory_options} -XX:CompressedClassSpaceSize=${jvm_compressedClassSpaceSize}m" diff --git a/logserver/bin/logserver-start.sh b/logserver/bin/logserver-start.sh index 02efda95798..e478e457470 100755 --- a/logserver/bin/logserver-start.sh +++ b/logserver/bin/logserver-start.sh @@ -78,7 +78,9 @@ ROOT=${VESPA_HOME%/} export ROOT cd $ROOT || { echo "Cannot cd to $ROOT" 1>&2; exit 1; } -addopts="-server -Xms32m -Xmx256m -XX:+PreserveFramePointer -XX:+UseTransparentHugePages -XX:CompressedClassSpaceSize=32m -XX:MaxDirectMemorySize=32m -XX:ThreadStackSize=448 -XX:MaxJavaStackTraceDepth=1000 -XX:ActiveProcessorCount=2 -XX:-OmitStackTraceInFastThrow -Djava.io.tmpdir=${VESPA_HOME}/tmp" +heap_min=32 +heap_max=256 +addopts="-server -Xms$(heap_min)m -Xmx$(heap_max)m -XX:+PreserveFramePointer $(get_jvm_hugepage_settings $heap_max) -XX:CompressedClassSpaceSize=32m -XX:MaxDirectMemorySize=32m -XX:ThreadStackSize=448 -XX:MaxJavaStackTraceDepth=1000 -XX:ActiveProcessorCount=2 -XX:-OmitStackTraceInFastThrow -Djava.io.tmpdir=${VESPA_HOME}/tmp" oomopt="-XX:+ExitOnOutOfMemoryError" diff --git a/standalone-container/src/main/sh/standalone-container.sh b/standalone-container/src/main/sh/standalone-container.sh index bee4c06c38d..3542ad3e540 100755 --- a/standalone-container/src/main/sh/standalone-container.sh +++ b/standalone-container/src/main/sh/standalone-container.sh @@ -167,10 +167,15 @@ StartCommand() { FixDataDirectory "$bundlecachedir" FixDataDirectory "$VESPA_HOME/var/crash" + # Note that the hardcoded memory Xmx=2048 migh be overridden by jvm_arguments, + # hence rendering get_jvm_hugepage_settings incorrect, but it is better than not. + # TODO Better way of extracting heap size arguments. + heap_min=128 + heap_max=2048 java \ - -Xms128m -Xmx2048m \ + -Xms$(heap_min)m -Xmx$(heap_max)m \ -XX:+PreserveFramePointer \ - -XX:+UseTransparentHugePages \ + $(get_jvm_hugepage_settings $heap_max) \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath="$VESPA_HOME/var/crash" \ -XX:+ExitOnOutOfMemoryError \ diff --git a/vespabase/src/common-env.sh b/vespabase/src/common-env.sh index 7268a0a7edc..7b812d40fec 100755 --- a/vespabase/src/common-env.sh +++ b/vespabase/src/common-env.sh @@ -129,6 +129,35 @@ optionally_reduce_base_frequency() { fi } +get_hugepage_size_mb() { + while read -r name size rest + do + if [[ "$name" =~ ^Hugepagesize:$ ]] + then + hugepagesize="$size" + unit="${rest,,}" + break + fi + done < /proc/meminfo + if [[ "$unit" == "kb" ]]; then + hugepage_size_mb=$(($hugepagesize / 1024)) + else + echo "Failed extracting hugepage size from /proc/meminfo. Unknown unit($unit)" + exit 1 + fi + OUT=$hugepage_size_mb +} + +get_jvm_hugepage_settings() { + local heap_mb="$1" + get_hugepage_size_mb + sz_mb=$OUT + if (($sz_mb * 2 < $heap_mb)); then + options=" -XX:+UseTransparentHugePages" + fi + echo "$options" +} + populate_environment export LD_LIBRARY_PATH=$VESPA_HOME/lib64 |