mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-26 20:05:05 +02:00
feat(error-handler): add actionable Node.js heap OOM guidance
Detect probable Node.js heap out-of-memory failures from log patterns and common build exit codes, then print targeted remediation hints instead of only a generic SIGABRT/SIGKILL message. - Detect OOM patterns in last log lines (Reached heap limit, JS heap OOM) - Treat node build contexts with exit 134/137/243 as likely heap issues - Suggest computed --max-old-space-size based on NODE_OPTIONS, var_ram, or MemTotal (clamped to 1024..4096 MB) - Recommend calling setup_nodejs before build steps so defaults apply
This commit is contained in:
@@ -313,6 +313,55 @@ error_handler() {
|
||||
echo -e "${TAB}-----------------------------------\n"
|
||||
fi
|
||||
|
||||
# Detect probable Node.js heap OOM and print actionable guidance.
|
||||
# This avoids generic SIGABRT/SIGKILL confusion for frontend build failures.
|
||||
local node_oom_detected="false"
|
||||
local node_build_context="false"
|
||||
if [[ "$command" =~ (npm|pnpm|yarn|node|vite|turbo) ]]; then
|
||||
node_build_context="true"
|
||||
fi
|
||||
if [[ "$exit_code" == "243" ]]; then
|
||||
node_oom_detected="true"
|
||||
elif [[ -n "$active_log" && -s "$active_log" ]]; then
|
||||
if tail -n 200 "$active_log" 2>/dev/null | grep -Eqi 'Reached heap limit|JavaScript heap out of memory|Allocation failed - JavaScript heap out of memory|FATAL ERROR: Reached heap limit'; then
|
||||
node_oom_detected="true"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$node_oom_detected" == "true" ]] || { [[ "$node_build_context" == "true" ]] && [[ "$exit_code" =~ ^(134|137)$ ]]; }; then
|
||||
local heap_hint_mb=""
|
||||
|
||||
# If explicitly configured, prefer the current value for troubleshooting output.
|
||||
if [[ -n "${NODE_OPTIONS:-}" ]] && [[ "${NODE_OPTIONS}" =~ max-old-space-size=([0-9]+) ]]; then
|
||||
heap_hint_mb="${BASH_REMATCH[1]}"
|
||||
elif [[ -n "${var_ram:-}" ]] && [[ "${var_ram}" =~ ^[0-9]+$ ]]; then
|
||||
heap_hint_mb=$((var_ram * 75 / 100))
|
||||
else
|
||||
local mem_kb=""
|
||||
mem_kb=$(awk '/^MemTotal:/ {print $2; exit}' /proc/meminfo 2>/dev/null || echo "")
|
||||
if [[ "$mem_kb" =~ ^[0-9]+$ ]]; then
|
||||
local mem_mb=$((mem_kb / 1024))
|
||||
heap_hint_mb=$((mem_mb * 75 / 100))
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$heap_hint_mb" ]] || ((heap_hint_mb < 1024)); then
|
||||
heap_hint_mb=1024
|
||||
elif ((heap_hint_mb > 4096)); then
|
||||
heap_hint_mb=4096
|
||||
fi
|
||||
|
||||
if declare -f msg_warn >/dev/null 2>&1; then
|
||||
msg_warn "Detected possible Node.js heap OOM during build."
|
||||
msg_warn "Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" before npm/pnpm/yarn build."
|
||||
msg_warn "Recommendation: call setup_nodejs before build steps so heap defaults are applied automatically."
|
||||
else
|
||||
echo -e "${YW}Detected possible Node.js heap OOM during build.${CL}"
|
||||
echo -e "${YW}Try: export NODE_OPTIONS=\"--max-old-space-size=${heap_hint_mb}\" before npm/pnpm/yarn build.${CL}"
|
||||
echo -e "${YW}Recommendation: call setup_nodejs before build steps so heap defaults are applied automatically.${CL}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Detect context: Container (INSTALL_LOG set + inside container /root) vs Host
|
||||
if [[ -n "${INSTALL_LOG:-}" && -f "${INSTALL_LOG:-}" && -d /root ]]; then
|
||||
# CONTAINER CONTEXT: Copy log and create flag file for host
|
||||
|
||||
Reference in New Issue
Block a user