mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-17 07:03:57 +00:00
Support jvm mem percentage (#3747)
This commit is contained in:
@@ -28,7 +28,19 @@ function buildSpigotFromSource {
|
||||
mkdir ${tempDir}
|
||||
cd ${tempDir}
|
||||
|
||||
jvmOpts="-Xms${INIT_MEMORY:-$MEMORY} -Xmx${MAX_MEMORY:-$MEMORY}"
|
||||
jvmOpts=""
|
||||
|
||||
if isPercentage "${INIT_MEMORY:-$MEMORY}"; then
|
||||
jvmOpts+="-XX:InitialRAMPercentage=$(getPercentageValue "${INIT_MEMORY:-$MEMORY}") "
|
||||
else
|
||||
jvmOpts+="-Xms${INIT_MEMORY:-$MEMORY} "
|
||||
fi
|
||||
|
||||
if isPercentage "${MAX_MEMORY:-$MEMORY}"; then
|
||||
jvmOpts+="-XX:MaxRAMPercentage=$(getPercentageValue "${MAX_MEMORY:-$MEMORY}")"
|
||||
else
|
||||
jvmOpts+="-Xmx${MAX_MEMORY:-$MEMORY}"
|
||||
fi
|
||||
|
||||
logn ''
|
||||
curl -sSL -o ${tempDir}/BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar && \
|
||||
|
||||
@@ -368,10 +368,15 @@ fi
|
||||
|
||||
if [[ ${INIT_MEMORY} || ${MAX_MEMORY} ]]; then
|
||||
log "Setting initial memory to ${INIT_MEMORY:=${MEMORY}} and max to ${MAX_MEMORY:=${MEMORY}}"
|
||||
if [[ ${INIT_MEMORY} ]]; then
|
||||
if isPercentage "$INIT_MEMORY"; then
|
||||
JVM_OPTS="-XX:InitialRAMPercentage=$(getPercentageValue "${INIT_MEMORY}") ${JVM_OPTS}"
|
||||
elif [[ ${INIT_MEMORY} ]]; then
|
||||
JVM_OPTS="-Xms${INIT_MEMORY} ${JVM_OPTS}"
|
||||
fi
|
||||
if [[ ${MAX_MEMORY} ]]; then
|
||||
|
||||
if isPercentage "$MAX_MEMORY"; then
|
||||
JVM_OPTS="-XX:MaxRAMPercentage=$(getPercentageValue "${MAX_MEMORY}") ${JVM_OPTS}"
|
||||
elif [[ ${MAX_MEMORY} ]]; then
|
||||
JVM_OPTS="-Xmx${MAX_MEMORY} ${JVM_OPTS}"
|
||||
fi
|
||||
fi
|
||||
@@ -431,15 +436,34 @@ elif [[ ${TYPE} == "CURSEFORGE" ]]; then
|
||||
|
||||
copyFilesForCurseForge
|
||||
|
||||
if isPercentage "$INIT_MEMORY" || isPercentage "$MAX_MEMORY"; then
|
||||
# Convert to bytes
|
||||
NORM_INIT_MEM=$(normalizeMemSize "$INIT_MEMORY")
|
||||
NORM_MAX_MEM=$(normalizeMemSize "$MAX_MEMORY")
|
||||
# Convert to MB
|
||||
((NORM_INIT_MEM*=1048576))
|
||||
((NORM_MAX_MEM*=1048576))
|
||||
|
||||
cat > "${FTB_DIR}/settings-local.sh" <<EOF
|
||||
export MIN_RAM="${NORM_INIT_MEM}M"
|
||||
export MAX_RAM="${NORM_MAX_MEM}M"
|
||||
export JAVA_PARAMETERS="${JVM_XX_OPTS} ${JVM_OPTS} $expandedDOpts"
|
||||
EOF
|
||||
else
|
||||
cat > "${FTB_DIR}/settings-local.sh" <<EOF
|
||||
export MIN_RAM="${INIT_MEMORY}"
|
||||
export MAX_RAM="${MAX_MEMORY}"
|
||||
export JAVA_PARAMETERS="${JVM_XX_OPTS} ${JVM_OPTS} $expandedDOpts"
|
||||
EOF
|
||||
fi
|
||||
|
||||
# patch CurseForge cfg file, if present
|
||||
if [ -f "${FTB_DIR}/settings.cfg" ] && [[ ${MAX_MEMORY} ]]; then
|
||||
sed -i "s/MAX_RAM=[^;]*/MAX_RAM=${MAX_MEMORY}/" "${FTB_DIR}/settings.cfg"
|
||||
if isPercentage "$MAX_MEMORY"; then
|
||||
sed -i "s/MAX_RAM=[^;]*/MAX_RAM=${NORM_MAX_MEM}M/" "${FTB_DIR}/settings.cfg"
|
||||
else
|
||||
sed -i "s/MAX_RAM=[^;]*/MAX_RAM=${MAX_MEMORY}/" "${FTB_DIR}/settings.cfg"
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "${FTB_DIR}" || (logError "Can't go into ${FTB_DIR}"; exit 1)
|
||||
|
||||
@@ -39,6 +39,23 @@ function get_major_version() {
|
||||
echo "$version" | cut -d. -f 1-2
|
||||
}
|
||||
|
||||
function isPercentage() {
|
||||
local value=$1
|
||||
|
||||
[[ $value =~ ^[0-9]+(\.[0-9]+)?\s*%$ ]]
|
||||
}
|
||||
|
||||
function getPercentageValue() {
|
||||
local value=$1
|
||||
if [[ "$value" =~ ^([0-9]+(\.[0-9]+)?)\s*%$ ]]; then
|
||||
echo "${BASH_REMATCH[1]}"
|
||||
return 0
|
||||
else
|
||||
logError "Value '$value' is not a valid percentage."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function isURL() {
|
||||
local value=$1
|
||||
|
||||
@@ -229,6 +246,7 @@ function logRcon() {
|
||||
|
||||
function normalizeMemSize() {
|
||||
local scale=1
|
||||
local mem=1
|
||||
case ${1,,} in
|
||||
*k)
|
||||
scale=1024
|
||||
@@ -239,10 +257,20 @@ function normalizeMemSize() {
|
||||
*g)
|
||||
scale=1073741824
|
||||
;;
|
||||
*%)
|
||||
# Get system memory
|
||||
if [ -f "/sys/fs/cgroup/memory/memory.limit_in_bytes" ]; then
|
||||
mem=$( cat /sys/fs/cgroup/memory/memory.limit_in_bytes )
|
||||
elif [ -f "/sys/fs/cgroup/memory.max" ]; then
|
||||
mem=$( cat /sys/fs/cgroup/memory.max )
|
||||
fi
|
||||
# Scale is used to transform percentages into decimals (eg. 60 -> 0.6)
|
||||
scale=0.01
|
||||
;;
|
||||
esac
|
||||
|
||||
val=${1:0:-1}
|
||||
echo $((val * scale))
|
||||
echo $((val * scale * mem))
|
||||
}
|
||||
|
||||
function compare_version() {
|
||||
|
||||
Reference in New Issue
Block a user