Skip to content

Tomcat — алерт когда HTTP connector близок к maxThreads

Под нагрузкой Tomcat-приложение упирается в `maxThreads=200` — новые запросы стоят в очереди, p99 latency растёт. Метрика есть в JMX, но никто не смотрит.

Рецепт

bash
#!/usr/bin/env bash
# Tomcat 9+ Manager / JMX servlet returns currentThreadsBusy.
HOST="${TOMCAT:-http://localhost:8080}"
USER_PASS="${TOMCAT_AUTH:-admin:admin}"
PORT="${PORT:-8080}"
THRESHOLD_PCT="${THRESHOLD_PCT:-80}"

XML=$(curl -sS -u "$USER_PASS" "$HOST/manager/status?XML=true")
BUSY=$(echo "$XML" | grep -oE "currentThreadsBusy=\"[0-9]+\"" | head -1 | grep -oE '[0-9]+')
MAX=$(echo "$XML"  | grep -oE "maxThreads=\"[0-9]+\""        | head -1 | grep -oE '[0-9]+')

[ -z "$BUSY" ] || [ -z "$MAX" ] && { echo "no-data"; exit 1; }
PCT=$((BUSY * 100 / MAX))
[ "$PCT" -ge "$THRESHOLD_PCT" ] && echo "high ${PCT}% (${BUSY}/${MAX})" || echo "ok ${PCT}%"

То же самое в Enterno.io

Endpoint + Enterno HTTP-монитор с keyword "ok" каждую минуту. Pro+ хранит history — видно паттерн "saturation в 14:00 ежедневно от cron".

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Spring-приложение тормозит — long GC pauses (>500ms) каждые несколько минут. Heap-size был ок, но new-gen неправильно настроен. Нужен endpoint с p99 pause.