Elasticache for Redis 클러스터에서 CPU 사용량이 많거나 증가하는 이유는 무엇입니까?

4분 분량
0

Amazon ElastiCache for Redis 클러스터에서 CPU 사용량이 많거나 증가하고 있습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Elasticache for Redis에 대한 두 가지 Amazon CloudWatch CPU 지표는 다음과 같습니다.

  • EngineCPUUtilization: 이 지표는 Redis 엔진 스레드의 CPU 사용률을 보고합니다. Redis는 단일 스레드이므로 vCPU가 4개 이상인 노드에 대해 EngineCPUUtilization 지표를 모니터링하는 것이 좋습니다.
  • CPUUtilization: 이 지표는 전체 호스트에 대한 CPU 사용률의 백분율을 보여줍니다. vCPU가 2개 이하인 소규모 노드의 경우 CPUUtilization 지표를 사용하여 클러스터 워크로드를 모니터링합니다.

해결 방법

높은 EngineCPUUtlilization

EngineCPUUtlilization이 높은 일반적인 이유는 다음과 같습니다.

  • CPU 시간을 많이 사용하는 장기 실행 명령: keys, hkeys, hgetall 등과 같이 시간 복잡도가 높은 명령은 CPU 시간을 더 많이 사용합니다. 각 명령에 대한 시간 복잡성 및 성능 제안은 redis.io 웹 사이트의 명령을 참조하세요. Lua 스크립트(EVAL 또는 EVALSHA Redis 명령에 의해 실행)는 Redis의 원자성 작업입니다. Lua 스크립트의 전체 실행 시간 동안 모든 서버 활동이 차단되어 EngineCPUUtilization이 높아집니다. Redis Slow 로그를 사용하여 장기 실행 명령 또는 장기 실행 Lua 스크립트가 있는지 확인합니다.
  • 많은 요청 수: 명령 통계를 확인하여 명령 버스트가 있는지 또는 지연 시간이 증가하고 있는지 확인합니다. GetTypeCDS 또는HashBasedCmds와 같은 CloudWatch 지표를 사용하여 명령 통계를 확인할 수 있습니다. 또는 Redis 명령 info commandstats를 사용할 수 있습니다. 애플리케이션의 예상 워크로드로 인해 요청 수가 많으면 클러스터를 확장하는 것이 좋습니다.
  • 백업 및 복제: SaveInProgress 지표를 확인하여 백업 또는 복제가 발생하고 있는지 확인합니다. 이 바이너리 지표는 백그라운드 저장(포크 또는 포크리스)이 진행 중일 때 "1"을 반환합니다. 백그라운드 저장이 진행 중이 아니면 지표는 "0"을 반환합니다. Redis 스냅샷을 생성하기에 충분한 메모리가 있는지 확인해야 합니다.
  • 많은 NewConnections 수: TCP 연결을 설정하는 것은 특히 TLS 지원 클러스터의 경우 컴퓨팅 소비가 많은 작업입니다. 단기간에 많은 수의 새 클라이언트 연결 요청이 발생하면 EngineCPUUtilization이 증가할 수 있습니다. Redis 6.2부터 vCPU가 4개 이상인 Graviton2 노드 유형에서 8개 이상의 vCPU가 있는 x86 노드 유형을 사용하는 TLS 지원 클러스터의 성능 향상이 구현되었습니다. 많은 수의 연결을 처리하는 방법에 대한 권장 사항은 모범 사례: Redis 클라이언트 및 Amazon ElastiCache for Redis를 참조하세요.
  • 많은 제거 수: Redis는 maxmemory-policy 파라미터에 따라 키를 제거합니다. 캐시에 새 데이터를 저장할 메모리가 충분하지 않을 때 제거가 발생합니다. 제거 볼륨이 크면 Redis가 키를 많이 제거하기 때문에 EngineCPUUtilization이 증가합니다. 제거 볼륨은 CloudWatch 지표 제거를 사용하여 모니터링할 수 있습니다. 제거량이 많으면 더 큰 노드 유형을 사용하여 클러스터를 스케일 아웃하거나 노드를 추가하여 확장합니다.
  • 많은 회수 수: 메모리를 확보하기 위해 Redis는 제한 시간 만료에 도달한 키를 샘플링한 다음 삭제합니다. 이 프로세스를 "회수"라고 합니다. 만료 수가 많으면 Redis가 키를 많이 회수하기 때문에 EngineCPUUtilization이 증가합니다. CloudWatch 지표 회수를 사용하여 키 만료 이벤트 수를 모니터링할 수 있습니다. 예를 들어 EXPIREAT Redis 명령을 실행하여 너무 많은 키를 동시에 만료시키지 않는 것이 좋습니다.

높은 EngineCPUUtilization 문제 해결에 대한 자세한 내용은 연결 문제 해결 - CPU 사용량을 참조하세요.

높은 CPUUtilization

CPUUtilization이 높은 일반적인 이유는 다음과 같습니다.

  • 많은 네트워크 트래픽 또는 연결: NewConnections, NetworkBytesIn, NetworkBytesOut, NetworkPacketsIn, NetworkPacketsOut CloudWatch 지표를 확인합니다.
  • 높은 EngineCPUUtilization 및 다른 스레드에서 처리되는 비동기식 I/O: 향상된 I/O 처리에 대한 자세한 내용은 Amazon EC2 M5 및 R5 인스턴스를 사용한 Amazon ElastiCache 성능 향상을 참조하세요.
  • 지속적인 관리형 유지 관리 및 서비스 업데이트: 유지 관리 및 서비스 업데이트에는 컴퓨팅 용량이 필요합니다. 따라서 이러한 이벤트 중에 CPUUtilization이 급증하는 것을 확인할 수 있습니다. 유지 관리 기간을 확인하여 급증이 그 기간과 일치하는지 확인합니다. 영향을 최소화하려면 사용량이 가장 적은 시간에 유지 관리 기간을 설정하는 것이 가장 좋습니다. 자세한 내용은 Amazon ElastiCache 관리형 유지 관리 및 서비스 업데이트 도움말 페이지를 참조하세요.
  • 많은 페이징 및 백업과 같은 작업: 노드의 메모리가 부족하면 커널 페이지 아웃 메모리가 스왑될 수 있습니다. 페이징이 과도하면 CPUUtilization이 증가할 수 있습니다. 마찬가지로 백업 또는 확장과 같은 작업 중에 노드의 로드가 많으면 CPUUtilization이 증가할 수 있습니다. 급증 원인을 식별하기 위한 지표에 대한 권장 사항은 Amazon CloudWatch를 사용하는 Amazon ElastiCache for Redis로 모범 사례 모니터링을 참조하세요.

AWS 공식
AWS 공식업데이트됨 2년 전