Redis 트러블슈팅

S_H_H·2025년 3월 10일
0

실전 레디스

목록 보기
4/7
post-thumbnail

트러블 슈팅은 엔진 내부 상황을 확인하기 위해 주로 INFO 명령어를 사용합니다. 하지만 지연 현상이나 메모리 관련 문제가 발생했을 때는 INFO 명령어만으로 대응하기 어려우며 레디스의 다른 기능을 활용해야 합니다.

먼저 지연이나 메모리 관련 문제가 발생했을 때는 다음과 같은 관점으로 문제를 구분합니다.

  • 특정 명령어만 느려지거나 전반적으로 명령어 처리가 늦어지는지의 여부
  • 특정 캐시 노드에서만 문제가 발생하는지 또는 모든 캐시 노드에서 문제가 발생하는지의 여부
  • 특정 클라이언트에서만 문제가 발생하는지 또는 다른 클라이언트에서도 문제가 발생하는지의 여부
  • 지속적으로 발생하는 문제인지 아니면 특정 시간에만 발생하는지의 여부
  • 문제 발생 빈도는 얼마나 되는지의 여부

INFO 명령어로 서버 정보 읽기

7.0.4 버전을 기준으로 INFO 명령어의 출력 결과는 다음 13가지로 구성됩니다.

  • Server : 레디스 서버 관련 일반 정보
  • Clients : 클라이언트 연결 정보
  • Memory : 레디스 서버 메모리 사용 상황
  • Persistence : RDB/AOF 정보
  • Stats : 통계 일반
  • Replication : 마스터/레플리카 정보
  • CPU : CPU 사용 통계 정보
  • Modules : 적재된 모듈에 대한 추가 정보
  • Commandstats : 레디스 명령어 통계
  • Errorstats : 레디스 내에서 발생한 다양한 오류 추적 정보
  • Latencystats : 지연 시간의 백분위 분포 통계
  • Cluster : 레디스 클러스터 정보
  • Keyspace : DB 관련 정보

옵션 없이 INFO 명령어를 실행하면 commandstats를 제외한 모든 부분이 표시됩니다. INFO ALL 입력시 모든 부분이 표시됩니다. INFO Replication 과 같이 INFO <name> 지정된 정보만 필터링할 수 있습니다.

Server

레디스 서버와 관련된 일반 정보를 표시

  • 클라이언트에서 레디스 서버의 버전을 확인할 때
  • 레디스 서버가 의도치 않게 재시작되지 않았는지 확인할 때
  • 서버가 시작된 후 경과한 시간을 확인할 때
  • 어떤 경로에서 레디스 서버를 실행하고 있는지 확인할 때
  • 현재 적재된 설정 파일을 확인할 때
항목상세 정보
redis_version레디스 서버 버전을 표시한다.
redis_git_sha1깃 SHA1을 표시한다.
redis_git_dirty깃 더티 플래그를 표시한다
redis_build_id빌드 ID를 표시한다.
redis_mode레디스 서버 모드(standalone, sentinel, cluster)를 표시한다.
OS레디스 서버 호스트 운영체제 종류를 표시한다.
arch_bits아키텍처(32비트, 64비트)를 표시한다.
monotonic_clock명령어 실행 시간 촉정에 사용하는 클럭 종류를 표시한다.
multiplexing_api레디스가 사용 중인 운영체제의 이벤트 루프 종류를 표시한다.
atomicvar_apiAtomicvar API 종류(atomic-builtin, sync-builtin. pthread-mutex)를 표 시한다.
gcc_version레디스 서버 컴파일에 사용된 GCC 컴파일러 버전을 표시한다.
process_id레디스 서버 프로세스 ID를 표시한다.
process_supervised 레디스 서버 프로세스 관리하는 시스템 및 서비스 매니저(upstart, systemd unknown, no)를 표시한다.
run_id레디스 서버를 특정하기 위해 무작위로 생성한 값을 표시한다.
tcp_port레디스가 명령 수신을 위해서 대기 중인 프로세스를 TCP 포트 번호를 표시한다.
server_time_usec시스템 유닉스 시간(마이크로 초)을 표시한다.
uptime_in_seconds레디스 서버 시작 후 경과한 시간(초 단위)을 표시한다.
uptime_in_days레디스 서버 시간 후 경과한 시간(일 단위)을 표시한다.
hz초당 백그라운드 처리 호출 빈도(1 1.1.3절 참조)를 표시한다.
configured_hz레디스 서버에서 설정된 백그라운드 프로세스가 1초 동안 호출된 횟수를 표시한다.
lru_clockLRU를 관리하기 위해 매 분마다 증가시키는 클럭을 표시한다. 스 트자츠
executable레디스 서버를 실행한 파일 경로를 표시한다.
config_fileredis-server를 실행할 때 지정한 설정 파일 경로를 표시한다.
io_threads_active1/0 스레드 활성화 여부 플래그를 표시한다.

Client

현재 클라이언트의 연결 현황 등 클라이언트 정보를 파악합니다.

항목상세 정보
connected_clients현재 클라이언트 연결 수(레플리카 연결은 제외)를 표시한다.
cluster_connections클러스터 버스에 사용된 대략적인 소켓 수를 표시한다.
maxclientsmaxclients 설정 지시자 값을 표시한다.
client_recent_max_input_buffer최근 클라이언트 연결 중 가장큰 입력 버퍼를 표시한다.
client_recent_max_output_buffer최근 클라이언트 연결 중 가장 큰 출력 버퍼를 표시한다.
blocked clients대대 블로킹으로 인해 보류 중인 클라이언트 수를 표시한다.
tracking_clients클라이언트 측 캐시로 트래킹된 클라이언트 수를 표시한다.
clients_in_timeout_table클라이언트 타임아웃 테이블 안의 클라이언트 수를 표시한다.

Memory

메모리 사용량 관련 내용을 표시합니다.

항목상세 정보
used_memory메모리 할당제(emaloc 등)로 할당된 메모리양(바이트 단위)을 표시한다
used_memory_humanused _memory를 사람이 이해하기 쉬운 형식으로 표시한다.
used_memory_rss운영체제가 감지하는 레디스에 할당된 메모리양을 표시한다
used_memory_rss_humanused_memory_rss를 사람이 이해하기 쉬운 형식으로 표시한다.
used_memory_peak레디스로 사용된 최고 메모리양(바이트 단위)을 표시한다.
used_memory_peak_humanused_memory_peak를 사람이 이해하기 쉬운 형식으로 표시한다.
used_memory_peak_percused_memory_peak을 use_memory로 나눈 백분율 값을 표시한다.
used_memory_overhead레디스 서버에 할당된 내부 데이터 구조 관리를 위한 오버헤드의 총 메모리양(바이트 단위)을 표시한다.
used_memory_startup레디스 시작 시 사용되는 초기 메모리양(바이트 단위)을 표시한다
used_memory_dataset데이터 세트를 통해 사용된 메모리양(바이트 단위)을 표시한다.
used_memory_dataset_perc레디스 프로세스가 인식하는 메모리양에서 시작 시 초기 메모리를 제외한 메모리 중 데이터 세트가 차지하는 비율(백분율)을 표시한다.
used_memory_lua루아 엔진에 사용되는 메모리양(바이트 단위, 폐지 예정)을 표시한다.
number_of_cached_scripts캐시된 스크립트 개수를 표시한다.
number_of_functions레디스 함수 개수를 표시한다.
number_of_libraries레디스 함수 라이브러리 개수를 표시한다
used_memory_vmn_eval이페머럴 스크립트가 루아 인터프리터에 사용하는 메모리 크기(바이트단위)를 표시한다.
used_memory_scripts_eval이페머럴 스크립트가 사용하는 메모리 오버헤드 양바이트 단위)을 표시한다.
used_memory_vm_functions레디스의 모든 엔진에서 실행되는 함수들이 사용하는 메모리 총량(바이트 단위)을 표시한다.
used_memory_functions레디스의 모든 엔진에서 실행되는 함수들이 발생시키는 메모리 오버헤드총량(바이트 단위)을 표시한다.
used_memory_vm_totalused_memory_vm_eval과 used_memory_vm_functions 총 메모리크기(바이트 단위)를 표시한다.
used_memory_vm_total_humanused_memory_vm_total을 사람이 이해하기 쉬운 형식으로 표시한다.
used_memory_scriptused _memory_scripts_eval과 used_memory_functions의총 메모리 크기(바이트 단위)를 표시한다.
used_memory_scripts_humanused_memory_scripts를 이해하기 쉬운 형식으로 표시한다.

운영체제가 인식하는 레디스에 할당된 메모리양(RSS)은 앞으로 RSS로 표기합니다.
사용중인 메모리가 maxmemory 값에 도달했을 때, 어떻게 동작할지 정책을 확인하는 것도 중요합니다. 각 내용들은 다음 항목을 통해 확인할 수 있습니다.

항목상세 정보
maxmemory설정 파일에 설정한 maxmemory 지시자 값을 표시한다.
maxmemory_humanmaxmemory를 사람이 이해하기 쉬운 형태로 표시한다.
maxmemory_policy설정 파일에 설정한 maxmemory-policy 지시자 값을 표시한다.

레디스 서버를 운영할 때, 메모리 단편화 문제가 발생할 수 있습니다. 이떄, mem_fragmentation_ratio 값이 중요한 참고 지표가 도비니다. 또한 동적 단편화 제거가 실행 중인지 여부를 확인하거나, Lazy Freeing 기능을 통해 비동기로 삭제할 때 대기 중인 객체의 수를 확인할 수 있습니다.

항목상세 정보
mem_fragmentation_ratioused_memory 대비 used_memory_rss의 비율을 표시한다.
mem_fragmentation_bytesused_memory_rss에서 used_memory를 뺀 메모리양(바이트 단위. 레디스 5.0.0 이후)을 표시한다.
mem_not_counted_for_evictAOF 버퍼와 레플리카용 클라이언트 출력 버퍼로 사용한 메모리양의 총합을 표시한다. 제거할 때 카운트 되지 않은 메모리양을 표향한다
mem_replication_backlog레플리케이션 로그에 의해 사용된 메모리양을 표시한다.
mem_total_replication_buffers레플리케이션 버퍼에 의해 사용되고 있는 총 메모리양을 표시한다.
mem_clients_slaves레플리카용 클라이언트 출력 버퍼에서 사용된 메모리양을 표시한다.
mem_clients_normal클라이언트용 클라이언트 출력 버퍼에서 사용된 메모리양을 표시한다.
mem_cluster_links클러스터 버스 상호 연결에 의해 사용되는 메모리양을 표시한다.
mem_aof_bufferAOF 버퍼에 의해 사용된 메모리양을 표시한다.
mem_allocator컴파일 시 사용된 메모리 할당자를 표시한다.
active_defrag_running동적 단편화 제거가 활성화된 상태인지 확인한다.
lazyfree_pending_objects비동기 삭제 대기 중인 객체 수를 확인한다.
lazyfreed_objects비동기로 삭제된 객체 수를 확인한다.

Persistence

영속성과 관련된 정보가 표시, RDB 파일과 AOF 정보를 의미합니다. 스냅숏이나 AOF 파일 생성 중인지의 여부와 마지막 실행 결과 및 생성에 소요된 시간 등을 확인할 수 있습니다.

항목상세 정보
loadingRDB 혹은 AOF 파일을 읽는 중인지 여부를 확인한다
current_cow_size포크 처리 중 CoW로 인한 메모리 사용 크기를 확인한다.
current_cow_size_age포크 처리 CoW로 인한 메모리 사용 크기가 마지막으로 업데이트된 후 경과한 시간을 확인한다.
current_fork_perc현재 포크 처리 진행률이다. current_save_keys_total 대비 current_save_keys _processed 비율을 확인한다.
current_save_keys_processed현재 저장 처리 중 처리 완료된 키 개수를 확인한다.
current_save_keys_total현재 저장 작업이 시작되는 시점의 키 개수를 확인한다.
rdb_changes_since_last_save마지막 RDB 파일 저장 이후 변경된 사항 수를 확인한다.
rdb_bgsave_in_progressBGSAVE 명령어로 스냅솟(RDB 파일)의 생성 여부를 확인한다.
rdb_last_save_time마지막으로 스냅솟(RDB 파일)의 생성이 정상적으로 수행된 시간을 표시한다.
rdb_last_bgsave_status마지막으로 수행된 BGSAVE 명령의 상태(ok erT)를 표시한다.
rdb_last_bgsave_time_sec마지막으로 수행된 BGSAVE 명령의 지속 시간(초)을 표시한다.
Idb_current_bgsave_time_sec현재 진행 중인 BGSAVE 명령의 지속 시간(초)을 표시한다.
rdb_saves레디스 서버 시작 이후 스냅솟 생성 횟수를 표시한다.
rdb_last_cow_size스냅솟(RDB 파일) 생성 중 CoW로 할당된 메모리 크기를 표시한다.
rdb_last_load_keys_expiredTTL이 설정된 키 중 마지막 RDB 읽기 작업 시 삭제된 키 개수를 표시한다.
rdb_last_load_keys_loaded마지막 RDB 읽기 작업시 적재된 키 개수를 표시한다.
aof_enabledAOF 활성화 여부를 표시한다.
aof_rewrite_in_progressAOF 재작성 여부를 표시한다.
aof_rewrite_scheduled현재 RDB 파일 생성 완료 후 AOF 재작성 예정 여부를 표시한다.
aof_last_rewrite_time_sec마지막으로 수행된 AOF 재작성 지속 시간(초 단위)을 표시한다
aof_current_rewrite_time_sec현재 진행 중인 AOF 재작성 지속 시간(초 단위)을 표시한다
aof_last_bgrewrite_status마지막으로 수행된 AOF 재작성 상태(ok, err)를 표시한다.
aof_rewrites서버 시작 이후 AOF 재작성 횟수를 표시한다.
aof_rewrites_consecutive_failuresAOF 재작성 연속 실패 횟수를 표시한다.
aof_last_write_status마지막으로 수행된 AOF 쓰기의 상태(ok, err)를 표시한다.
aof_last_cow_size마지막으로 수행된 AOF 재작성 시 Cow로 할당된 메모리 크기를 표시한다.
module_fork_in_progress모듈의 포크 처리 진행 중인지 여부를 확인한다.
module_fork_last_cow_size마지막 모듈의 포크 처리 중 CoW로 인한 메모리 소비 크기를 표시한다.

성능상 문제가 발생했을 때, rdb_bgsave_in_progress 값이 1이라면 스냅숏 생성 중에 포크 처리의 영향을 받고 있을 수 있습니다. 반대로 높은 부하로 인해 복제 링크가 끊어져서 스냅숏을 새로 생성하는 과정에서 값이 커질 수도 있습니다.

Stats

다양한 통계 데이터가 집약되어 있습니다. 성능 개선 작업할 때는 이 통계 데이터를 유용하게 활용할 수 있습니다. 성능에 문제가 있다면 연결 수를 가장 먼저 확인해야 합니다. 시간당 새롭게 연결된 수를 주의 깊게 봐야 합니다. 제한 값에 도달했는지 초과하진 않았는지 확인합니다. 이외에도 캐시 미스와 히트율 계산 등 운영 관리에 중요한 정보가 많이 포함되어 있습니다.

항목상세 정보
total_connections_received레디스 서버가 수신한 총 연결 수를 표시한다.
total_commands_processed레디스 서버가 처리한 총 명령어 수를 표시한다
instantaneous_ops_per_sec초당 처리한 명령어 수를 표시한다.
total_net_input_bytes네트워크에서 수신한 총 바이트 수를 표시한다.
total_net_output_bytes네트워크에 전송된 총 바이트 수를 표시한다.
total_net_repl_input_bytes레플리케이션 처리를 위해 네트워크에서 수신한 총 바이트 수를 표시한다.
total_net_repl_output_bytes레플리케이션 처리를 위해 네트워크에서 전송한 총 바이트 수를 표시한다.
instantaneous_input_kbps초당 네트워크 읽기 속도(KB/s)를 표시한다.
instantaneous_output_kbps하 초당 네트워크 쓰기 속도(KB/s)를 표시한다.
instantaneous_input_repl_kbps초당 레플리케이션을 위해 네트워크 읽기 속도(KB/s)를 표시한다.
instantaneous_output_repl_kbps초당 레플리케이션을 위해 네트워크 쓰기 속도(KB/s)를 표시한다.
rejected_connectionsmaxclients 설정 값으로 인해 거부된 연결 수를 표시한다.
sync_full레플리카와 완전 동기화가 수행된 수를 표시한다.
sync_partial_ok부분 동기화 요청이 수락된 횟수를 표시한다.
sync_partial_err부분 동기화 요청이 거부된 횟수를 표시한다.
expired_keys만료된 키의 총 개수를 표시한다.
expired_stale_perc샘플링된 키 중 만료된 키의 비율을 표시한다.
expired_time_cap_reached_count만료 확인 시간 제한 초과 횟수를 표시한다.
expire_cycle_cpu_milliseconds만료 주기 처리에 소요된 CPU 시간(밀리 초단위)을 표시한다.
evicted_keysmaxmemory 지시자 값에 의해 제거된 키 개수를 표시한다.
evicted_clientsmaxmemory-clients 지시자 값에 의해 제거된 클라이언트 수를 표시한다.
total_eviction_exceeded_time레디스 서버 시작 후, 메모리 사용량이 초과된(used_memory 지시 자값이 maxmemory 지시자 값보다 컸던) 총 시간(마이크로초단 위)을 표시한다.
current_eviction_exceeded_time메모리 사용량이 초과 상태(used_memory 지시자 값이 maxme mory 지시자 값보다 큰 상태)의 지속 시간(마이크로 초 단위)을 표 A 1958 시한다.
keyspace_hits캐시 호출 성공 횟수를 표시한다.
keyspace_misses캐시 호출 실패 횟수를 표시한다
pubsub_channels클라이언트가 구독 중인 모든 채널 수를 표시한다.
pubsub_patterns클라이언트가 구독 중인 모든 패턴 수를 표시한다.
pubsubshard_channelsShared Pub/Sub 기능으로 만들어진 채널 수를 표시한다.
latest_fork_usec마지막 포크 처리 시간(마이크로 초 단위)을 표시한다.
total_forks서버 시작 이후 포크 처리 횟수를 표시한다
migrate_cached_socketsMIGRATE 명령어를 위해 개방된 소켓 수를 표시한다.
slave_expires_tracked_keys레플리카에서 추적 중인 만료된 키의 개수를 표시한다.
active_defrag_hits동적 단편화 제거 과정에서 재할당된 값의 개수를 표시한다.
active_defrag_misses동적 단편화 제거 과정에서 할당이 중단된 값의 개수를 표시한다.
active_defrag_key_hits동적 단편화 제거를 통해 처리된 키의 개수를 표시한다.
active_defrag_key_misses동적 단편화 제거로 처리하지 못한 키의 개수를 표시한다.
total_active_defrag_time동적 단편화제거 과정을 수행한 총 시간을 표시한다.
current_active_defrag_time현재 진행 중인 동적 단편화 제거를 확인한다.
tracking_total_keys클라이언트 촉 캐시 기능으로 레디스 서버가 추적하는 총 키의 개수를 표시한다.
tracking_total_items추적되고 있는 각 키와 관련해서 클라이언트가 저장하고 있는 데이터 항목의 총 개수를 표시한다.
tracking_total_prefixes레디스가 클라이언트 측 캐시 사용 시 추적하고 있는 접두사의 개수를 표시한다
unexpected_error_repliesAOF 읽기 작업 또는 레플리케이션 오류 종류, 예상치 못한 오류 응답 수를 표시한다.
total_error_replies실행 전에 거부된 명령어와 실행 발생한 명령어의 총합을 표시한다.
dump_payload_sanitizations사용자 연결 및 RDB 파일이나 ESTORE 명령어의 페이로드를 읽을때 내부 인코딩 데이터 일관성을 검증한 횟수를 표시한다.
total_reads_processed읽기 작업 이벤트 처리를 표시한다.
total_writes_processed쓰기 작업 이벤트 처리를 표시한다.
io_threaded_reads_processed메인 스레드와 /0 스레드를 통해 처리된 읽기 작업 이벤트 수를 표시한다.
io_threaded_writes_processed메인 스레드와 1/0 스레드를 통해 처리된 쓰기 직업 이벤트 수를 표시한다.
reply_buffer_shrinks출력 버퍼가 축소된 총합을 표시한다.
reply_buffer_expands출력 버퍼가 확장된 총합을 표시한다.

Replication

레플리케이션에 문제가 발생했을 때 레플리카의 캐수나 각각의 지연 상태 및 연결 상태 등을 확인할 때 사용합니다.
role은 캐시 노드 역할을 나타내며, 마스터인 경우 master, 레플리카인 경우 slave를 표시합니다.

  • role이 레플리카인 경우의 정보
항목상세 정보
master_host마스터 IP 주소 및 호스트 이름을 표시한다.
master_port마스터가 실행 중인 TCP 포트 번호를 표시한다.
master_link_status레플리케이션 링크 상태(up, down)를 표시한다.
master_last_io_seconds_ago마스터와 마지막으로 통신한 뒤 경과한 시간(초 단위)을 표시한다.
master_sync_in_progress마스터가 레플리카와 동기화 중인지 여부를 표시한다.
slave_repl_offset증 레플리케이션 오프셋을 표시한다.
master_sync_left_bytes레플리케이션 과정 중 동기화 완료까지 남은 크기바이트 단위)를 표시한다.
master_sync_last_io_seconds_ago레플리케이션 과정 중 동기화 처리 중에 마지막 1/O가 전송된 후 경과 한 시간(초 단위)을 표시한다.
master_link_down_since_seconds레플리케이션 과정 중 링크가 다운된 후 경과한 시간(초 단위을 표시한다.
repl_sync_enabled(ElastiCache) 동기화가 활성화되었는지를 표시한다.
slave_read_reploff(ElastiCache) 마스터 읽기 작업 레플리케이션 오프셋을 표시한다.
slave_priority페일오버 우선순위를 표시한다.
slave_read_only레플리카가 읽기 전용인자를 확인한다.
  • 공통적으로 표시되는 정보
항목상세 정보
connected_slaves연결 중인 레플리카 개수를 표시한다.
master_failover_state페일 오버 진행 상태(no-failover, failover-in-progress waiting-for-sync. unknown)를 표시한다.
min_slaves_good_slavemin-slaves-to-write가 활성화된 경우. 정상적인 레플리카의 개수를 표시한다.
master_replid레디스 서버의 레플리케이션 ID를 표시한다.
master_replid2레디스 서버의 두 번째 레플리케이션 ID. 페일오버 시 PSYNC 사용 을 확인한다.
master_repl_offset현재 레플리케이션 오프셋을 표시한다.
second_repl_offset수신한 레플리케이션 ID까지의 오프셋을 표시한다.
repl_backlogactive 레플리케이션 백로그의 활성화 여부를 확인한다.
repl_backlog_size레플리케이션 백로그의 총 버퍼 크기를 표시한다.
repl_backlog_first_byte_offset레플리케이션 백로그 버퍼의 마스터 오프셋을 표시한다.
repl_backlog_histlen레플리케이션 백로그 버퍼 내 데이터 크기바이트 단위)를 표시한다.

mastser_repl_offset - slaveX의 offset 값을 통해 레플리케이션 랙을 구하여 지연되고 있는 데이터가 있는지 확인할 수 있습니다.

CPU

INFO 명령어로 확인하는 CPU 값은 레디스 서버가 시작된 이후 누적된 CPU 시간을 나타내므로 직관적으로 확인하기 어렵습니다. 일반적으로는 서드파티 모니터링 도구나 클라우드 관리형 서비스 호스트를 사용하면 CPU 사용률을 별도로 제공하는 경우가 많으므로 이를 활용하게 됩니다.

Modules

레디스 6 이후 등장한 모듈 관련 정보를 보여줍니다.

Commandstats

레디스 서버에서 실행되는 특정 명령어 때문에 CPU 사용률이 100%에 도달하는 경우가 있습니다. 이런 문제가 발생하면, 슬로우 로그와 함께 Commandstats 결과를 확인하여 복잡도가 큰 명령어가 과도하게 사용되고 있지 않은지 파악하는데 사용합니다.

Commandstats는 다음과 같은 내용을 표시합니다.

  • 레디스 서버 내에 실행된 명령어별 호출 횟수
  • 명령어 실행에 소요된 총 CPU 시간
  • 명령어 실행에 소요된 평균 CPU 시간
  • 호출이 거부된 횟수
  • 호출에 실해한 횟수

Latencystats

명령어 지연 시간 통계 정보를 보여줍니다. 백분율 분포에 대한 값을 보여주며, 백분율 분포를 변경하려면 latency-tracking-info-percentiles 의 값을 변경하면 됩니다.

Errorstats

오류 통계를 표시합니다. 오류 종류별 카운트가 표시됩니다.

Cluster

현재 실행 중인 레디스 서버에 클러스터 모드가 활성화되어 있는지 여부를 확인할 수 있습니다.

Keyspace

레디스 서버 내에 여러 DB가 사용되고 있는지 확인하거나, 메모리가 부족한 상황에서 TTL이 키에 적절히 설정되었는지 참고하는데 자주 사용됩니다.

지연 시간 조사

CPU 사용량이 높아진 것으로 파악되는 경우, 슬로우 로그와 함께 INFO 명령어의 Commandstats를 확인하며 주로 과거의 실행 기록과 정기적인 실행 결과의 차이를 비교합니다. 또한 KEYS * 명령어나 루아, 트랜잭션 처리 및 계산량이 많은 명령어 등 시간이 많이 소요되는 처리가 없는지도 확인해야 합니다.

슬로우 로그

슬로우 로그는 레디스 서버에서 쿼리 실행 시간이 긴 것들을 로그로 기록하는 기능입니다.
2가지 옵션을 통해 설정 파일에서 조정할 수 있습니다.
slowlog-log-slower-than 마이크로 초 단위로 설정하여, 오래 걸린 쿼리를 기록합니다. 음수인 경우 비활성화되고, 0이면 모든 쿼리를 저장합니다.
slowlog-max-len 서버가 유지할 엔트리 수를 지정합니다.
SLOWLOG GET 10 명령어를 사용하여 지정된 숫자만큼 슬로우 로그를 조회합니다.

redis-cli

지연 시간 검출용 옵션을 통해 지연 시간을 확인할 수 있습니다.

옵션상세 정보
--latency지연 시간 정보를 계속 수집하며, 최소값, 최대값, 평균치 통계를 계속해서 출력한다.
--latency-history--latency 옵션과 같지만 기본적으로 15초 단위로 줄바꿈되며, 통계를 다시 초기화해서 계산한다
--latency-dist지연 시간과 비율에 따라 색상으로 구분된 스펙트럼을 표시된다.
--intrinsic-latency지정한 시간만큼 시스템 고유 지연 시간을 측정한다.

지연 시간 모니터링

문제가 발생할 수 있는 여러 동작을 이벤트로 포착합니다. 또한 이벤트별로 지연 시간 스파이크를 시계열로 기록할 수 있습니다. 명령어를 실행할 때는 슬로우 로그나 INFO Commandstatsusec_per_call 등을 확인하는 것이 유용합니다. 이러한 정보들을 활용해도 원인을 파악하기 어려운 경우에는 지연 시간 모니터링 기능을 사용해보는 것이 좋습니다. 여기서 얻은 정보와 슬로우 로그를 대조하면 더 상세한 정보를 확인할 수 있습니다.

지연 시간 모니터링은 LATENCY 명령어를 통해 사용할 수 있으며 6 가지 하위 명령어를 제공합니다.
지연 시간 모니터링은 기본적으로 비활성화되어 있지만, 사용하는 메모리양이 매우 적기 때문에 지연 시간 문제가 발생하기 전에 활성화하는 것이 좋습니다. 물론 메모리 사용량이 적다고 하더라도 데이터 수집 시 영향을 줄 수 있다는 사실도 주의해야 합니다.

메모리 문제

레디스 명령어 중 메모리 사용량을 확인할 수 있는 MEMEORY 명령어가 있습니다. 기존에도 INFO 명령어로 확인할 수 있었지만, MEMORY 명령어를 통해 더 자세히 확인할 수 있게 되었습니다.

MEMORY DOCTOR 명령어는 레디스 7.0.4 기준으로 다음과 같은 기준으로 이루어집니다.

  • 메모리 사용량이 5MB 이상인지
  • 최대 시간 시 메모리 사용량이 현재 사용 중인 메모리량의 150% 이상인지
  • RSS가 크고, 프래그먼테이션이 1.4 이상이며, 메모리 사용량이 10MB 이상인지
  • 메모리 할당자에서 외부 프래그먼테이션이 1.1 이상이며, 메모리 사용량이 10MB 이상인지
  • 메모리 할당자에서 RSS가 크고, 프래그먼테이션이 1.1 이상이며, 메모리 사용량이 10MB 이상인지
  • 이페머럴 스크립트나 모듈 등 메모리 할당자가 아닌 프로세스에 의한 의보 프래그먼테이션이 1.1 이상이며, 메모리 사용량이 10MB 이상인지
  • 각 클라이언트가 클라이언트 출력 버퍼에서 평균 200KB 이상의 메모리를 사용하는지
  • 각 레플리카가 클라이언트 출력 버퍼에서 평규 10MB 이상의 메모리를 사용하는지
  • 이페머럴 스크립트가 1000개 이상 캐시되어 있는지

MEMORY STATS 메모리의 세부 내용을 확인할 수 있습니다.
MEMORY MALLOC_STATA 메모리 할당자의 내부 통계 정보를 확인할 수 있습니다.
MEMORY PURGE 메모리 할당자가 더티 페이지를 회수하도록 지시합니다.
MEMORY USAGE 명령어는 키와 그에 연관된 값, 오버헤드를 포함하여 데이터를 저장하는 데 필요한 메모리양의 크기를 나타냅니다.

profile
LEVEL UP

0개의 댓글