Skip to content

Memcached — алерт когда evictions слишком высоки

Memcached переполнился и начал выбрасывать ключи под нагрузкой — приложение получает cache-miss и долбит БД. Нужен порог evictions/мин.

Рецепт

bash
#!/usr/bin/env bash
# Reads "stats" via netcat; computes delta between two probes 60s apart.
HOST="${MC_HOST:-127.0.0.1}"
PORT="${MC_PORT:-11211}"
THRESHOLD="${EV_THRESHOLD:-1000}"
STATE=/var/tmp/mc-evictions.last

CUR=$( (echo stats; sleep 0.2; echo quit) | nc -q1 "$HOST" "$PORT" | awk '/^STAT evictions/ {print $3}')
NOW=$(date +%s)
[ -z "$CUR" ] && { echo "no-data"; exit 1; }

if [ -f "$STATE" ]; then
  read -r LAST_VAL LAST_TS < "$STATE"
  DT=$(( NOW - LAST_TS ))
  [ "$DT" -gt 0 ] && {
    DELTA=$(( CUR - LAST_VAL ))
    PER_MIN=$(( DELTA * 60 / DT ))
    [ "$PER_MIN" -ge "$THRESHOLD" ] && echo "high $PER_MIN" || echo "ok $PER_MIN"
  }
fi
echo "$CUR $NOW" > "$STATE"

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

Поднимите endpoint + HTTP-монитор Enterno с проверкой на "ok". Сочетайте с monitor-history dashboard — видно когда eviction-rate скакнул вместе с deploy.

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

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

Node-приложение тормозит из-за блокирующих CPU-операций; latency пользователей растёт. Нужен endpoint с моментальным значением event-loop-lag.