내용으로 건너뛰기

Amazon ECS에 호스팅된 애플리케이션의 성능 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Elastic Container Service(Amazon ECS)에서 호스팅되는 애플리케이션의 응답 시간이 느립니다.

해결 방법

응답 시간이 느린 이유 파악

Amazon ECS 서비스 이벤트를 검토하여 작업이 중지된 이유를 확인하십시오.

리소스 제약

애플리케이션 로그에 다음과 같은 오류 메시지 중 하나가 표시될 수 있습니다.

  • CPU 문제: Thread starvation, clock leap 또는 execution timeouts
  • 메모리 문제: OutOfMemoryError 또는 GC overhead limit exceeded

애플리케이션에 리소스 문제가 발생하면 컨테이너가 중지될 수 있습니다. 진행 중인 작업은 완료되기 전에 폐기됩니다. 데이터가 손실되고 요청에 대한 응답이 실패합니다.

리소스 제약 문제를 해결하려면 다음 단계를 완료하십시오.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 작업 정의를 선택합니다.
  3. 새 작업 정의 만들기를 선택합니다.
  4. 컨테이너 세부 정보 섹션에서 워크로드의 리소스를 정의합니다.
    참고: 자세한 내용은 Amazon ECS의 CPU 할당에 대해 알아야 할 사항은 무엇입니까?를 참조하십시오.
  5. 리소스를 할당할 Amazon Elastic Compute Cloud(Amazon EC2) 컨테이너 인스턴스 유형을 선택합니다.
  6. 작업 시작 시간을 최적화합니다.

CPU 및 메모리 사용률에 대한 자세한 내용은 서비스 수준 CPU 및 메모리 사용률을 참조하십시오.

I/O 및 네트워킹 문제

연결 오류 또는 제한 시간으로 인해 다음 오류 메시지 중 하나가 나타날 수 있습니다.

  • 연결 제한 시간 및 재시도: SocketTimeoutException: connect timed out
  • DNS 확인 실패: Could not resolve host: api.example.com
  • 네트워크 연결 불가 오류: Network is unreachable (Host : 'database.example.com'. Port: 5432)
  • 연결 거부 오류: java.net.ConnectException: Connection refused (Connection refused)
  • SSL/TLS 오류: SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

I/O 및 네트워킹 문제를 해결하려면 다음 작업을 수행하십시오.

  • DNS 설정을 확인합니다.
  • 보안 그룹 규칙을 확인합니다.
  • SSL/TLS를 올바르게 구성했는지 확인합니다.

데이터베이스 오류

데이터베이스 문제의 경우 애플리케이션 로그에 다음과 같은 오류 메시지 중 하나가 표시될 수 있습니다.

  • 연결 풀 고갈: java.sql.SQLException: Too many connections
  • 쿼리 시간 초과: ERROR: canceling statement due to statement timeout
  • 교착 상태: Deadlock found when trying to get lock; try restarting transaction
  • 연결 문제: Cannot connect to MySQL server on '*' (111)

데이터베이스 문제를 해결하려면 데이터베이스 쿼리를 최적화한 후 인덱스를 다시 작성하십시오.

로드 밸런서 지표 및 상태 확인 모니터링

로드 밸런서 및 대상에 대한 지표를 모니터링하기 위해 Amazon CloudWatch를 사용할 수 있습니다.

애플리케이션 응답 검토

다음과 같은 5xx 상태 코드 중 하나가 표시될 수 있습니다.

  • HTTP 500 Internal Server Error
  • HTTP 502 Bad Gateway
  • HTTP 504 Gateway Timeout

이러한 문제를 해결하려면 일반 오류를 참조하십시오.

애플리케이션 로그에서 오류 메시지 검토

CloudWatch를 사용하여 Amazon ECS 로그에서 연결 제한 시간, 데이터베이스 쿼리 초과 시간 제한 또는 메모리 제한 초과와 같은 오류가 있는지 검토할 수 있습니다. 오류를 식별하고 병목 현상과 응답 시간을 분석하려면 애플리케이션 추적 데이터를 사용하십시오.

성능 최적화

다음 방법을 사용하여 Amazon ECS에 호스팅된 애플리케이션의 성능을 개선하십시오.

데이터 캐시

캐싱 시스템을 사용하여 데이터를 빠르게 전송합니다. 사용할 수 있는 캐싱 시스템의 예로는 Redis, Memcached 또는 Amazon CloudFront가 있습니다.

EC2 시작 유형을 사용하는 경우 ECS_IMAGE_PULL_BEHAVIOR: prefer-cached를 Amazon ECS 컨테이너 에이전트 풀 동작으로 구성합니다. 자세한 내용은 Amazon ECS 작업 시작 시간 최적화를 참조하십시오.

Application Auto Scaling 사용

Application Auto Scaling을 사용하여 수요에 따라 작업 수를 수정합니다. 그런 다음, 크기 조정 정책을 구성합니다.

자세한 내용은 Amazon EC2 Auto Scaling이란 무엇입니까?를 참조하십시오.

컨테이너 이미지 최적화

다단계 빌드를 사용하여 이미지 크기를 줄이고 이미지 레이어를 캐시합니다. 자세한 내용은 Fargate에서 Linux 컨테이너의 Amazon ECS 컨테이너 이미지 풀 동작을 참조하십시오.

효율적인 로그 및 모니터 구현

LogConfiguration API를 사용하여 로그 수준을 설정한 다음, AWS X-Ray를 사용하여 분산 추적을 구현합니다.

관련 정보

Amazon ECS 서비스 이벤트 메시지

Application Load Balancer의 CloudWatch 지표

Amazon ECS 및 Amazon CloudWatch Logs를 사용하는 중앙 집중식 컨테이너 로그

Fargate에서 Amazon ECS 서비스 오토 스케일링을 구성하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 일 년 전