Files
proxmox/scripts/audit-proxmox-rpc-besu-heap.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

71 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Audit Besu heap sizing (BESU_OPTS) vs container memory for RPC VMIDs.
#
# Usage:
# PROXMOX_HOST=192.168.11.10 ./scripts/audit-proxmox-rpc-besu-heap.sh
#
# Output highlights containers where Xmx appears larger than container memory.
set -euo pipefail
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
UNIT="/etc/systemd/system/besu-rpc.service"
VMIDS=(2400 2401 2402 2500 2501 2502 2503 2504 2505 2506 2507 2508)
ssh_pve() {
ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 "root@${PROXMOX_HOST}" "$@"
}
extract_xmx_gb() {
local line="$1"
# Matches -Xmx8g / -Xmx4096m
if [[ "$line" =~ -Xmx([0-9]+)([gGmM]) ]]; then
local n="${BASH_REMATCH[1]}"
local u="${BASH_REMATCH[2]}"
if [[ "$u" =~ [gG] ]]; then
echo "$n"
return 0
fi
# m -> gb (floor)
echo $(( n / 1024 ))
return 0
fi
echo ""
}
echo "=== Proxmox RPC Besu Heap Audit ==="
echo "Host: ${PROXMOX_HOST}"
echo
printf "%-6s %-8s %-12s %-20s %s\n" "VMID" "MEM(MB)" "SWAP(MB)" "BESU_OPTS" "RISK"
printf "%-6s %-8s %-12s %-20s %s\n" "----" "------" "--------" "--------" "----"
for v in "${VMIDS[@]}"; do
mem="$(ssh_pve "pct config ${v} | sed -n 's/^memory: //p' | head -1" 2>/dev/null | tr -d '\r')"
swap="$(ssh_pve "pct config ${v} | sed -n 's/^swap: //p' | head -1" 2>/dev/null | tr -d '\r')"
opts_line="$(ssh_pve "pct exec ${v} -- bash -lc \"grep -oE 'BESU_OPTS=.*' ${UNIT} 2>/dev/null | head -1\"" 2>/dev/null | tr -d '\r' || true)"
# Fallback to just the Environment= line
if [[ -z "${opts_line}" ]]; then
opts_line="$(ssh_pve "pct exec ${v} -- bash -lc \"grep -n 'BESU_OPTS' ${UNIT} 2>/dev/null | head -1\"" 2>/dev/null | tr -d '\r' || true)"
fi
xmx_gb="$(extract_xmx_gb "${opts_line}")"
mem_gb=$(( (mem + 1023) / 1024 ))
risk=""
if [[ -n "${xmx_gb}" ]] && [[ "${mem_gb}" -gt 0 ]] && [[ "${xmx_gb}" -ge "${mem_gb}" ]]; then
risk="HIGH (Xmx>=mem)"
fi
printf "%-6s %-8s %-12s %-20s %s\n" "$v" "${mem:-?}" "${swap:-?}" "$(echo "${opts_line:-<missing>}" | cut -c1-20)" "${risk}"
done
cat <<'NOTE'
NOTE:
- A safe rule of thumb: keep -Xmx <= ~60-70% of container memory to avoid swap/IO thrash during RocksDB work.
- If you see HIGH risk, reduce BESU_OPTS and restart besu-rpc during a maintenance window.
NOTE