개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Redis 모니터링 — INFO, SLOWLOG, LATENCY로 상태 파악하기

2026년 2월 10일
RedisMonitoringINFOSLOWLOG성능 모니터링

Redis가 느려졌습니다. 어디서 병목이 생겼는지 파악해야 합니다. Redis는 자체 모니터링 도구를 제공합니다. 진단을 위한 핵심 명령을 정리합니다.

INFO — 전반적 상태 확인

INFO 명령은 Redis 서버의 전반적인 상태를 반환합니다.

# 전체 정보
INFO

# 특정 섹션만
INFO server
INFO clients
INFO memory
INFO stats
INFO replication
INFO cpu
INFO keyspace

주요 지표

INFO memory
# used_memory_human: 2.50G        ← 현재 사용 메모리
# used_memory_peak_human: 3.00G   ← 최대 사용 메모리
# mem_fragmentation_ratio: 1.08   ← 단편화 비율 (1.5 이상이면 주의)
# maxmemory_human: 4.00G          ← 최대 허용 메모리

INFO stats
# total_commands_processed: 1234567  ← 처리한 명령 수
# instantaneous_ops_per_sec: 15000   ← 초당 처리 명령 수
# keyspace_hits: 980000              ← 캐시 히트 수
# keyspace_misses: 20000             ← 캐시 미스 수
# rejected_connections: 0            ← 거부된 연결 수

INFO clients
# connected_clients: 150        ← 현재 연결 수
# blocked_clients: 5            ← BLPOP 등으로 대기 중인 수
# maxclients: 10000             ← 최대 허용 연결 수

INFO keyspace
# db0:keys=50000,expires=30000,avg_ttl=86400000
# ← 키 50000개, 만료 예약 30000개, 평균 TTL 24시간

메모리 단편화 비율(mem_fragmentation_ratio): 실제 사용 메모리 대비 OS에서 할당된 메모리 비율. 1.0 미만이면 스왑 사용 중(위험), 1.5 이상이면 단편화 심함(재시작 고려).

캐시 히트율 계산

히트율 = keyspace_hits / (keyspace_hits + keyspace_misses) × 100

예: 980000 / (980000 + 20000) × 100 = 98%

80% 이하면 캐시가 효과를 발휘하지 못하고 있는 것입니다.

SLOWLOG — 느린 명령 추적

기준 시간(마이크로초)을 초과한 명령을 기록합니다.

# 설정 (기본: 10000 마이크로초 = 10ms)
CONFIG SET slowlog-log-slower-than 1000   # 1ms 이상
CONFIG SET slowlog-max-len 100            # 최대 100개 보관

# 느린 명령 조회 (최근 10개)
SLOWLOG GET 10

# 결과 예시
# 1) 1) (integer) 14          ← 로그 ID
#    2) (integer) 1718700000  ← 실행 시각 (Unix timestamp)
#    3) (integer) 15234       ← 소요 시간 (마이크로초, 15.2ms)
#    4) 1) "KEYS"             ← 명령
#       2) "*"
#    5) "127.0.0.1:12345"    ← 클라이언트 주소

# SLOWLOG 개수 확인
SLOWLOG LEN

# SLOWLOG 초기화
SLOWLOG RESET

KEYS *가 보이면 즉시 SCAN으로 교체해야 합니다.

SLOWLOG: Redis가 내부적으로 기록하는 느린 명령 로그. 명령 실행 시간만 측정하며 네트워크 왕복 시간은 포함하지 않습니다.

MONITOR — 실시간 명령 모니터링

실행 중인 모든 명령을 실시간으로 출력합니다.

MONITOR
# OK
# 1718700000.000000 [0 127.0.0.1:12345] "SET" "key1" "value"
# 1718700000.001000 [0 127.0.0.1:12346] "GET" "key2"
# 1718700000.002000 [0 127.0.0.1:12345] "EXPIRE" "key1" "3600"

운영 환경에서는 성능 저하를 유발하므로 디버깅 시 잠시만 사용합니다. 트래픽이 많을수록 MONITOR 자체가 Redis를 느리게 만듭니다.

LATENCY — 지연 분석

이벤트별 지연 히스토리를 기록합니다.

# 활성화
CONFIG SET latency-monitor-threshold 1  # 1ms 이상 지연 기록

# 이벤트 목록
LATENCY LATEST
# 1) 1) "command"          ← 이벤트 이름
#    2) (integer) 1718700000  ← 마지막 발생 시각
#    3) (integer) 15          ← 마지막 지연 (ms)
#    4) (integer) 200         ← 최대 지연 (ms)

# 히스토리
LATENCY HISTORY command

# 초기화
LATENCY RESET

DEBUG SLEEP — 지연 시뮬레이션

개발 환경에서 Redis 지연을 인위적으로 만들어 테스트합니다.

DEBUG SLEEP 2   # 2초 동안 Redis 블로킹 (모든 요청 대기)

핵심 모니터링 지표 요약

지표명령정상 기준
메모리 사용률INFO memorymaxmemory 80% 이하
캐시 히트율INFO stats80% 이상
초당 명령 수INFO stats서버 사양에 따라 다름
연결 수INFO clientsmaxclients의 80% 이하
단편화 비율INFO memory1.0 ~ 1.5
느린 명령SLOWLOG0건 유지 목표
복제 지연INFO replicationlag 0 ~ 1초

주요 운영 이슈와 원인

메모리 부족

INFO memory
# maxmemory_policy: allkeys-lru   ← Eviction 정책 확인
# evicted_keys: 1000              ← 강제 삭제된 키 수 증가 중

evicted_keys가 증가한다면 메모리 증설이 필요합니다.

연결 수 초과

INFO clients
# rejected_connections: 50  ← 거부된 연결 있음

Connection Pool 설정을 재검토하거나 maxclients를 높여야 합니다.

느린 명령

SLOWLOG GET 5
# KEYS *, SMEMBERS(대용량), SORT 같은 O(N) 명령 확인

O(N) 명령을 대체 명령으로 교체하거나 사용 자체를 제한합니다.

← 이전 글Redis 트랜잭션 — MULTI/EXEC로 여러 명령 원자적 실행
다음 글 →Redis 분산 락 — 동시 요청 충돌 방지