Files
spring-boot-demo/entrypoint.sh
Savosin Denis e6db3360c2 add entrypoint to dockerfile and doc
fix resource usage
2025-11-06 15:47:56 +07:00

78 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
VERBOSE=false
while getopts "v" arg; do
case $arg in
v )
VERBOSE=true
;;
* )
;;
esac
done
# Сдвигаем позиционные параметры после обработки опций
shift $((OPTIND-1))
JAR_FILE_NAME=$1
if [ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]
then
LIMITED_RAM_CONTAINER_CGROUP_SIZE_BYTES=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
if [ $VERBOSE = true ]; then echo "Cgroups v1 are used"; fi
elif [ -f /sys/fs/cgroup/memory.max ]
then
LIMITED_RAM_CONTAINER_CGROUP_SIZE_BYTES=$(cat /sys/fs/cgroup/memory.max)
if [ $VERBOSE = true ]; then echo "Cgroups v2 are used"; fi
else
echo "No cgroups files with memory limits"; exit 1
fi
#
LIMITED_RAM_CONTAINER_CGROUP_SIZE_MB=$((LIMITED_RAM_CONTAINER_CGROUP_SIZE_BYTES / 1024 / 1024))
TOMCAT_THREADS_MAX=${TOMCAT_THREADS_MAX:-100}
TOMCAT_THREADS_MIN=${TOMCAT_THREADS_MIN-$TOMCAT_THREADS_MAX}
HIKARI_DB_MAXIMUM_POOL_SIZE=${HIKARI_DB_MAXIMUM_POOL_SIZE:-10}
HIKARI_DB_MINIMUM_IDLE_SIZE=${HIKARI_DB_MINIMUM_IDLE_SIZE:-$HIKARI_DB_MAXIMUM_POOL_SIZE}
JVM_NATIVE_MB=${JVM_NATIVE_MB:-120}
STOCK_SIZE_MB=$((TOMCAT_THREADS_MAX / 2 + HIKARI_DB_MAXIMUM_POOL_SIZE + JVM_NATIVE_MB))
LIMITED_MAXRAM_JAVA_SIZE_MB=$((LIMITED_RAM_CONTAINER_CGROUP_SIZE_MB - STOCK_SIZE_MB))
#
RESERVED_CODE_CACHE_SIZE_MB=${RESERVED_CODE_CACHE_SIZE_MB:-64}
MAX_METASPACE_SIZE_MB=${MAX_METASPACE_SIZE_MB:-80}
DIRECT_BYTES_BUFFERS_MB=${DIRECT_BYTES_BUFFERS_MB:-10}
COMPRESSED_CLASS_SPACE_MB=${COMPRESSED_CLASS_SPACE_MB:-16}
NON_HEAP_SIZE_MB=$((RESERVED_CODE_CACHE_SIZE_MB + MAX_METASPACE_SIZE_MB + DIRECT_BYTES_BUFFERS_MB + COMPRESSED_CLASS_SPACE_MB))
#
HEAP_GC_SIZE_MB=$((LIMITED_MAXRAM_JAVA_SIZE_MB - NON_HEAP_SIZE_MB))
OVERHEAD_GC_SIZE_PERCENT=${OVERHEAD_GC_SIZE_PERCENT:-5}
OVERHEAD_GC_SIZE_MB=$((HEAP_GC_SIZE_MB * OVERHEAD_GC_SIZE_PERCENT / 100))
HEAP_SIZE_MB=$((HEAP_GC_SIZE_MB - OVERHEAD_GC_SIZE_MB))
#
MAX_RAM_PERCENTAGE=$((HEAP_SIZE_MB * 100 / LIMITED_MAXRAM_JAVA_SIZE_MB))
# export calculated environments
export TOMCAT_THREADS_MAX=$TOMCAT_THREADS_MAX
export TOMCAT_THREADS_MIN=$TOMCAT_THREADS_MIN
export HIKARI_DB_MAXIMUM_POOL_SIZE=$HIKARI_DB_MAXIMUM_POOL_SIZE
export HIKARI_DB_MINIMUM_IDLE_SIZE=$HIKARI_DB_MINIMUM_IDLE_SIZE
if [ $VERBOSE = true ]
then
echo "LIMITED_MAXRAM_JAVA_SIZE_MB=$LIMITED_MAXRAM_JAVA_SIZE_MB"
echo "HEAP_SIZE_MB=$HEAP_SIZE_MB"
echo "MAX_RAM_PERCENTAGE=$MAX_RAM_PERCENTAGE"
fi
# shellcheck disable=SC2086
exec java \
-XX:+UseContainerSupport \
-XX:+ExitOnOutOfMemoryError \
-XX:MaxRAM="${LIMITED_MAXRAM_JAVA_SIZE_MB}m" \
-XX:MaxRAMPercentage="$MAX_RAM_PERCENTAGE" \
-XX:+SegmentedCodeCache \
-XX:ReservedCodeCacheSize="${RESERVED_CODE_CACHE_SIZE_MB}m" \
-XX:MaxMetaspaceSize="${MAX_METASPACE_SIZE_MB}m" \
$JAVA_OPTS_OVERRIDE \
-jar /app/"$JAR_FILE_NAME"