| #!/usr/bin/env bash |
| # Shebang header for korapxmltool: auto-enables native access (Java 25+) and chooses a default -Xmx. |
| # Usage: |
| # cat korapxmltool.shebang app/build/libs/korapxmltool.jar > korapxmltool |
| # chmod +x korapxmltool |
| # (Run `zip -A korapxmltool` if your unzip/java complains about prepended bytes.) |
| # |
| # Override memory: |
| # export KORAPXMLTOOL_XMX_MB=8192 # sets -Xmx8192m |
| # export KORAPXMLTOOL_JAVA_OPTS="... -Xmx4g" # full custom opts |
| # Otherwise we pick ~75% of detected memory (cgroup aware), clamped to [1024m, 65536m]. |
| |
| set -euo pipefail |
| |
| has_xmx=false |
| for v in "${JDK_JAVA_OPTIONS:-}" "${JAVA_TOOL_OPTIONS:-}" "${KORAPXMLTOOL_JAVA_OPTS:-}"; do |
| [[ $v == *"-Xmx"* ]] && has_xmx=true && break |
| done |
| for arg in "$@"; do |
| [[ $arg == -Xmx* ]] && has_xmx=true && break |
| done |
| |
| detect_mem_limit_mb() { |
| local cgroup_limit |
| if [[ -f /sys/fs/cgroup/memory.max ]]; then |
| cgroup_limit=$(< /sys/fs/cgroup/memory.max) |
| [[ $cgroup_limit == "max" ]] && cgroup_limit="" |
| elif [[ -f /sys/fs/cgroup/memory/memory.limit_in_bytes ]]; then |
| cgroup_limit=$(< /sys/fs/cgroup/memory/memory.limit_in_bytes) |
| fi |
| |
| local limit_mb="" |
| if [[ -n ${cgroup_limit:-} && $cgroup_limit =~ ^[0-9]+$ && $cgroup_limit -lt 9223372036854771712 ]]; then |
| limit_mb=$(( cgroup_limit / 1024 / 1024 )) |
| fi |
| |
| local memtotal_kb |
| memtotal_kb=$(awk '/MemTotal/ { print $2; exit }' /proc/meminfo 2>/dev/null || echo "") |
| local total_mb="" |
| if [[ $memtotal_kb =~ ^[0-9]+$ ]]; then |
| total_mb=$(( memtotal_kb / 1024 )) |
| fi |
| |
| if [[ -n $limit_mb && -n $total_mb ]]; then |
| (( limit_mb < total_mb )) && echo "$limit_mb" || echo "$total_mb" |
| else |
| echo "${limit_mb:-${total_mb:-4096}}" |
| fi |
| } |
| |
| EXTRA_OPTS=() |
| if [[ "${JDK_JAVA_OPTIONS:-}" != *"--enable-native-access="* ]]; then |
| EXTRA_OPTS+=(--enable-native-access=ALL-UNNAMED) |
| fi |
| |
| if ! $has_xmx; then |
| if [[ -n ${KORAPXMLTOOL_XMX_MB:-} && ${KORAPXMLTOOL_XMX_MB:-} =~ ^[0-9]+$ ]]; then |
| xmx_mb=${KORAPXMLTOOL_XMX_MB} |
| else |
| mem_mb=$(detect_mem_limit_mb) |
| xmx_mb=$(( mem_mb * 75 / 100 )) |
| (( xmx_mb < 1024 )) && xmx_mb=1024 |
| (( xmx_mb > 65536 )) && xmx_mb=65536 |
| fi |
| EXTRA_OPTS+=("-Xmx${xmx_mb}m") |
| fi |
| |
| exec java "${EXTRA_OPTS[@]}" ${KORAPXMLTOOL_JAVA_OPTS:-} -jar "$0" "$@" |