Files
cybercore-signer/scripts/bench/bench_startup_rss.sh
T

61 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Script de medição de tempo de inicialização e memória RSS em idle do CyberCore Signer
PORT=21325
JAR_FILE="modules/cybercore-app/target/cybercore-signer.jar"
JAVA_BIN="${JAVA_HOME:-/home/claudecio/.jdks/jdk-25.0.4.1+1}/bin/java"
if [ ! -f "$JAR_FILE" ]; then
echo "Erro: JAR $JAR_FILE não encontrado. Execute ./mvnw package primeiro."
exit 1
fi
# Garante que a porta esteja livre antes de iniciar
fuser -k "${PORT}/tcp" 2>/dev/null || true
sleep 1
# Timestamp inicial em milissegundos
START_TIME=$(date +%s%3N)
# Inicia o agente em modo headless
"$JAVA_BIN" -jar "$JAR_FILE" --headless --port "$PORT" > /dev/null 2>&1 &
APP_PID=$!
# Aguarda até que o endpoint CCSP /status responda HTTP 200
MAX_WAIT_SECONDS=15
READY=0
while true; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:${PORT}/ccsp/v1/status" 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
READY=1
break
fi
CURRENT_TIME=$(date +%s%3N)
ELAPSED=$((CURRENT_TIME - START_TIME))
if [ "$ELAPSED" -gt $((MAX_WAIT_SECONDS * 1000)) ]; then
echo "Timeout aguardando inicialização do servidor CCSP."
kill -9 "$APP_PID" 2>/dev/null || true
exit 1
fi
sleep 0.05
done
END_TIME=$(date +%s%3N)
STARTUP_MS=$((END_TIME - START_TIME))
# Aguarda 2 segundos para estabilização de memória em repouso (idle)
sleep 2
# Mede RSS via ps (em KB)
RSS_KB=$(ps -o rss= -p "$APP_PID" | tr -d ' ' || echo "0")
RSS_MB=$(awk "BEGIN {printf \"%.2f\", $RSS_KB / 1024}")
# Encerra o processo limpo
kill "$APP_PID" 2>/dev/null || true
wait "$APP_PID" 2>/dev/null || true
echo "STARTUP_MS=${STARTUP_MS}"
echo "RSS_KB=${RSS_KB}"
echo "RSS_MB=${RSS_MB}"