mirror of
https://github.com/Dannecron/spring-boot-demo.git
synced 2025-12-26 00:32:34 +03:00
add entrypoint to dockerfile and doc
fix resource usage
This commit is contained in:
77
entrypoint.sh
Executable file
77
entrypoint.sh
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user