blob: 6f8befc715eb366928a5674700022bd7aed76315 [file] [log] [blame]
Marc Kupietzfbfcd042025-11-16 13:33:32 +01001#!/usr/bin/env bash
Marc Kupietz02cd8bf2025-11-16 14:21:25 +01002# Shebang header for korapxmltool: auto-enables native access (Java 25+) and chooses a default -Xmx.
Marc Kupietzfbfcd042025-11-16 13:33:32 +01003# Usage:
4# cat korapxmltool.shebang app/build/libs/korapxmltool.jar > korapxmltool
5# chmod +x korapxmltool
6# (Run `zip -A korapxmltool` if your unzip/java complains about prepended bytes.)
Marc Kupietz02cd8bf2025-11-16 14:21:25 +01007#
8# Override memory:
9# export KORAPXMLTOOL_XMX_MB=8192 # sets -Xmx8192m
10# export KORAPXMLTOOL_JAVA_OPTS="... -Xmx4g" # full custom opts
11# Otherwise we pick ~75% of detected memory (cgroup aware), clamped to [1024m, 65536m].
Marc Kupietzfbfcd042025-11-16 13:33:32 +010012
13set -euo pipefail
14
Marc Kupietz02cd8bf2025-11-16 14:21:25 +010015has_xmx=false
16for v in "${JDK_JAVA_OPTIONS:-}" "${JAVA_TOOL_OPTIONS:-}" "${KORAPXMLTOOL_JAVA_OPTS:-}"; do
17 [[ $v == *"-Xmx"* ]] && has_xmx=true && break
18done
19for arg in "$@"; do
20 [[ $arg == -Xmx* ]] && has_xmx=true && break
21done
22
23detect_mem_limit_mb() {
24 local cgroup_limit
25 if [[ -f /sys/fs/cgroup/memory.max ]]; then
26 cgroup_limit=$(< /sys/fs/cgroup/memory.max)
27 [[ $cgroup_limit == "max" ]] && cgroup_limit=""
28 elif [[ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]]; then
29 cgroup_limit=$(< /sys/fs/cgroup/memory/memory.limit_in_bytes)
30 fi
31
32 local limit_mb=""
33 if [[ -n ${cgroup_limit:-} && $cgroup_limit =~ ^[0-9]+$ && $cgroup_limit -lt 9223372036854771712 ]]; then
34 limit_mb=$(( cgroup_limit / 1024 / 1024 ))
35 fi
36
37 local memtotal_kb
38 memtotal_kb=$(awk '/MemTotal/ { print $2; exit }' /proc/meminfo 2>/dev/null || echo "")
39 local total_mb=""
40 if [[ $memtotal_kb =~ ^[0-9]+$ ]]; then
41 total_mb=$(( memtotal_kb / 1024 ))
42 fi
43
44 if [[ -n $limit_mb && -n $total_mb ]]; then
45 (( limit_mb < total_mb )) && echo "$limit_mb" || echo "$total_mb"
46 else
47 echo "${limit_mb:-${total_mb:-4096}}"
48 fi
49}
50
Marc Kupietzfbfcd042025-11-16 13:33:32 +010051EXTRA_OPTS=()
52if [[ "${JDK_JAVA_OPTIONS:-}" != *"--enable-native-access="* ]]; then
53 EXTRA_OPTS+=(--enable-native-access=ALL-UNNAMED)
54fi
55
Marc Kupietz02cd8bf2025-11-16 14:21:25 +010056if ! $has_xmx; then
57 if [[ -n ${KORAPXMLTOOL_XMX_MB:-} && ${KORAPXMLTOOL_XMX_MB:-} =~ ^[0-9]+$ ]]; then
58 xmx_mb=${KORAPXMLTOOL_XMX_MB}
59 else
60 mem_mb=$(detect_mem_limit_mb)
61 xmx_mb=$(( mem_mb * 75 / 100 ))
62 (( xmx_mb < 1024 )) && xmx_mb=1024
63 (( xmx_mb > 65536 )) && xmx_mb=65536
64 fi
65 EXTRA_OPTS+=("-Xmx${xmx_mb}m")
66fi
67
68exec java "${EXTRA_OPTS[@]}" ${KORAPXMLTOOL_JAVA_OPTS:-} -jar "$0" "$@"