mirror of
https://github.com/Dannecron/spring-boot-demo.git
synced 2025-12-25 16:22:35 +03:00
78 lines
2.7 KiB
Bash
Executable File
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"
|