Java GC — алерт по росту pause-time
Spring-приложение тормозит — long GC pauses (>500ms) каждые несколько минут. Heap-size был ок, но new-gen неправильно настроен. Нужен endpoint с p99 pause.
Рецепт
#!/usr/bin/env bash
# Spring Boot 2.4+ — Actuator exposes JVM metrics out of the box.
# Returns p99 pause in ms; "high" when over threshold.
ACTUATOR="${ACTUATOR:-http://localhost:8080/actuator/metrics/jvm.gc.pause}"
THRESHOLD_MS="${GC_THRESHOLD_MS:-500}"
P99=$(curl -s "$ACTUATOR" | python3 -c '
import json, sys
try:
data = json.load(sys.stdin)
val = next((m["value"] for m in data["measurements"] if m["statistic"] == "MAX"), 0)
print(int(round(val * 1000)))
except Exception:
print("0")
')
[ -z "$P99" ] && { echo "no-data"; exit 1; }
[ "$P99" -ge "$THRESHOLD_MS" ] && echo "high $P99" || echo "ok $P99"
То же самое в Enterno.io
Поднимите endpoint и Enterno HTTP-монитор с keyword "ok". Корреляция со PageSpeed-монитором страницы покажет — это GC лагает или upstream-API.
Похожие рецепты
long_query_time = 1, slow_query_log включён. Нужно понимать, когда количество медленных запросов в минуту резко вырастает (deploy сломал индекс, ORM начал N+1).
Memcached переполнился и начал выбрасывать ключи под нагрузкой — приложение получает cache-miss и долбит БД. Нужен порог evictions/мин.
Node-приложение тормозит из-за блокирующих CPU-операций; latency пользователей растёт. Нужен endpoint с моментальным значением event-loop-lag.