내용으로 건너뛰기

ElastiCache for Valkey 또는 ElastiCache for Redis OSS에서 지연 시간이 긴 문제를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon ElastiCache for Valkey 또는 Amazon ElastiCache for Redis OSS 클러스터에서 지연 시간이 긴 문제를 해결하고 싶습니다.

간략한 설명

ElastiCache for Valkey 또는 ElastiCache for Redis OSS 클러스터에서 지연 시간이 길어지는 문제의 일반적인 원인은 다음과 같습니다.

  • 느린 명령 속도
  • 높은 메모리 사용량으로 인한 스왑 활동 증가
  • 네트워크 문제
  • 클라이언트 측 지연 시간 문제
  • Redis 동기화
  • Amazon ElastiCache 클러스터 이벤트

해결 방법

느린 명령 속도

Valkey 및 Redis OSS 클러스터는 단일 스레드 방식이므로 ElastiCache는 현재 요청이 완료될 때까지 클라이언트에 서비스를 제공할 수 없습니다. 이러한 속도 저하로 인해 요청의 전체 시간이 증가하고 지연 시간이 길어집니다.

평균 지연 시간을 모니터링하기 위해 Valkey 및 Redis에 대한 Amazon CloudWatch 지표를 사용하여 특정 명령을 모니터링할 수 있습니다. 자세한 내용은 Valkey 및 Redis OSS의 지표를 참조하십시오.

엔진에서 처리하는 데 10ms 이상 걸리는 명령 목록을 검색하려면 SLOWLOG GET 명령을 사용합니다. 영향을 받는 노드에 연결하여 valkey-cli에서 slowlog get 128 명령을 실행할 수 있습니다.

또한 ElastiCache는 일반적인 Redis 작업을 마이크로초 지연 시간으로 계산합니다. CloudWatch는 1분마다 지표를 샘플링하고 지연 시간 지표를 여러 명령의 집계로 표시합니다. 단일 명령으로 시간 초과와 같은 사소한 문제가 발생하고, 지표 그래프가 크게 변하지 않을 수 있습니다.

완료하는 데 시간이 오래 걸리는 느린 명령 속도는 ElastiCache 노드의 CPU 사용량을 높일 수 있습니다. EngineCPUUtilization 지표가 증가하면 ElastiCache for Redis의 자체 설계 클러스터에서 CPU 사용량 증가 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

다음은 ElastiCache 클러스터 속도를 느리게 만들 수 있는 복잡한 명령의 예시입니다.

  • 대규모 데이터세트가 있는 프로덕션 환경에서 KEYS 명령 사용: KEYS 명령은 전체 키스페이스를 스윕하고 지정된 패턴을 검색합니다. 자세한 내용은 Valkey 웹 사이트의 KEYS를 참조하십시오.
  • 실행하는 데 시간이 오래 걸리는 Lua 스크립트: 스크립트의 복잡도 또는 데이터세트의 크기에 따라 Lua 스크립트가 장시간 실행되어 지연 시간 문제가 발생할 수 있습니다.

높은 메모리 사용량으로 인한 스왑 활동 증가

클러스터의 메모리 압력이 증가할 때 Redis는 메모리 페이지를 교체합니다. 메모리 페이지는 스왑 영역 간에 전송되기 때문에 스왑으로 인해 지연 시간이 늘어나고 시간 초과가 발생할 수 있습니다. CloudWatch 지표에서 다음과 같은 변화는 스왑 활동 증가를 보여주는 신호입니다.

  • SwapUsage 증가
  • FreeableMemory 값이 낮음
  • BytesUsedForCacheDatabaseMemoryUsagePercentage 지표 값이 높음

스왑 활동 증가 문제를 해결하려면 다음 문서를 검토하십시오.

네트워크 문제

네트워크 문제로 인해 클러스터의 지연 시간이 증가할 수 있습니다. 네트워크 문제에 따라 다음 작업을 완료하여 지연 시간이 긴 문제를 해결하십시오.

클라이언트와 ElastiCache 클러스터 간의 네트워크 지연 시간

클라이언트와 ElastiCache 클러스터 간의 지연 시간을 줄이기 위해 클라이언트와 클러스터 노드 간의 네트워크 지연 시간을 분리할 수 있습니다. 자세한 내용은 가상 프라이빗 클라우드(VPC)의 EC2 Linux 또는 Windows 인스턴스와 인터넷 게이트웨이를 통한 온프레미스 호스트 간의 네트워크 성능 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

클러스터가 네트워크 제한에 도달

ElastiCache 노드는 관련 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 동일한 네트워크 제한을 공유합니다. 예를 들어, ElastiCache cache.m6g.large 노드 유형과 Amazon EC2 m6g.large 인스턴스의 네트워크 제한은 동일합니다. 지원되는 ElastiCache 노드 유형 및 네트워크 대역폭 제한에 대한 자세한 내용은 지원되는 노드 유형을 참조하십시오.

ElastiCache 노드 네트워크 제한 문제를 해결하려면 네트워크 관련 제한을 참조하십시오.

참고: Amazon EC2 인스턴스의 네트워크 성능, 대역폭 용량, PPS(Packet-per-Second) 성능, 추적된 연결을 모니터링하는 것이 좋습니다.

TCP/SSL 핸드셰이크 지연 시간

클라이언트가 Redis 클러스터에 연결할 때 TCP 연결을 만드는 데 몇 밀리초가 걸릴 수 있습니다. 이 시간 동안 지연이 발생해 Redis 작업과 ElastiCache 노드 CPU에 추가적인 부담을 줄 수 있습니다. 새 연결이 많으면 이러한 부담으로 인해 네트워크 지연 시간이 길어질 수 있습니다.

연결량을 제어하고 지연 시간을 줄이기 위해 연결 풀을 사용하여 수립된 TCP 연결을 풀에 캐시할 수 있습니다. 연결 풀을 구성하려면 Redis 클라이언트 라이브러리를 사용합니다. 또는 수동으로 연결 풀을 구축할 수 있습니다.

연결 풀을 최적화하기 위해 MSET 또는 MGET, Redis 파이프라인과 같이 집계된 명령을 사용할 수도 있습니다. 자세한 내용은 Redis 웹 사이트의 Redis 파이프라이닝을 참조하십시오.

ElastiCache 노드에 많은 연결 존재

ElastiCache 노드에 많은 수의 TCP 연결이 있는 경우 maxclients 제한에 도달할 수 있습니다. 이 제한에 도달하면 ‘ERR max number of clients reached error’가 발생하고, 연결 시간 초과가 발생할 수 있습니다.

긴 지연 시간을 줄이기 위해 CurrConnectionsNewConnections CloudWatch 지표를 추적하는 것이 좋습니다. 이러한 지표를 모니터링하여 ElastiCache 노드에 있는 TCP 연결 수를 확인할 수 있습니다. maxclient 제한에 도달했을 때 발생하는 문제를 해결하려면 대량의 연결 섹션을 모범 사례: Redis 클라이언트 및 Amazon ElastiCache for Redis에서 참조하십시오.

클라이언트 측 지연 시간 문제

제한 시간 값이 너무 낮은 클라이언트 리소스를 구성하면 시간 제한 오류가 발생할 수 있습니다. 클라이언트 리소스로 인해 지연 시간 문제가 발생하는지 확인하려면 클라이언트 측의 메모리, CPU 및 네트워크 사용률을 확인합니다. 이러한 리소스가 제한에 가까운 경우 리소스가 응답할 수 있도록 클라이언트 측 제한 시간 값을 더 크게 구성하십시오.

애플리케이션이 Amazon EC2 인스턴스에서 실행되는 경우 CloudWatch 지표를 사용하여 문제를 더 자세히 식별할 수 있습니다. 또는 atop 또는 CloudWatch 에이전트와 같은 Amazon EC2 인스턴스 내의 모니터링 도구를 사용할 수 있습니다.

클라이언트가 긴 지연 시간의 원인인지 확인하려면 다음 문제를 확인합니다.

  • 시간 초과가 자주 발생하는지 또는 하루 중 특정 시간에 발생하는지 확인합니다.
  • 시간 초과가 특정 클라이언트에서 발생하는지 또는 여러 클라이언트에서 발생하는지 확인합니다.
  • 시간 초과가 특정 Valkey 또는 Redis 노드에서 발생하는지, 또는 여러 노드에서 발생하는지 확인합니다.
  • 시간 초과가 특정 클러스터에서 발생하는지 또는 여러 클러스터에서 발생하는지 확인합니다.

Redis 동기화

Redis 동기화는 백업, 노드 교체, 규모 조정 이벤트 시 시작됩니다. 이 프로세스는 지연 시간을 유발할 수 있는 컴퓨팅 집약적인 워크로드입니다.

동기화가 노드 성능에 영향을 미쳤는지 확인하려면 CloudWatch에서 SaveInProgress 지표를 확인할 수 있습니다.

참고: 사용자 트래픽에 미치는 영향을 최소화하도록 사용량이 적은 시간에 동기화 이벤트를 예약하는 것이 좋습니다.

ElastiCache 클러스터 이벤트

ElastiCache 클러스터에 클러스터 이벤트가 있는 경우 이벤트 중에 지연 시간이 길어질 수 있습니다. ElastiCache 콘솔을 사용하여 지연 기간 동안의 이벤트를 검토할 수 있습니다. ElastiCache 관리형 유지 관리 및 서비스 업데이트로 인한 노드 교체 또는 장애 조치 이벤트와 같은 백그라운드 활동을 확인합니다.

예기치 않은 하드웨어 장애로 인해 지연 시간이 길어졌다고 생각되는 경우 AWS Support에 문의하십시오.

참고: AWS Health Dashboard에서 예약된 이벤트 알림을 볼 수 있습니다.

이벤트 로그 예시:

Finished recovery for cache nodes 0001
Recovering cache nodes 0001
Failover from master node cluster_node to replica node cluster_node completed

관련 정보

Amazon CloudWatch를 사용하여 Amazon ElastiCache for Redis의 모범 사례 모니터링

지속적 연결 문제

ElastiCache for Redis OSS 또는 ElastiCache for Valkey 클러스터에서 로그 전송을 활성화하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 10달 전
댓글 없음

관련 콘텐츠