내용으로 건너뛰기

Elastic Load Balancing에서 Application Load Balancer의 긴 지연 시간 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Elastic Load Balancing(ELB)에서 Application Load Balancer의 긴 지연 시간 문제를 해결하고 싶습니다.

간략한 설명

Application Load Balancer의 지연 시간이 긴 원인은 다음과 같습니다.

  • 네트워크 연결 또는 혼잡 문제
  • 백엔드 인스턴스의 높은 메모리(RAM) 사용량
  • 백엔드 인스턴스의 높은 CPU 사용량
  • 백엔드 인스턴스의 잘못된 웹 서버 구성
  • 백엔드 인스턴스에서 실행되는 웹 애플리케이션 종속성 관련 문제
  • 클라이언트 또는 온프레미스 대상과 Application Load Balancer 간의 먼 지리적 거리

해결 방법

Application Load Balancer의 긴 지연 시간 문제를 해결하려면 다음 작업을 수행하십시오.

  • 네트워크 연결 문제를 확인합니다. 자세한 내용은 Application Load Balancer 문제 해결을 참조하십시오.

  • 첫 번째 바이트 응답을 측정하고 지연 시간을 유발할 수 있는 느린 DNS 확인이 있는지 여부를 확인합니다.

    curl -kso /dev/null -w "\n===============\n
    | DNS lookup: %{time_namelookup}\n
    | Connect: %{time_connect}\n
    | App connect: %{time_appconnect}\n
    | Pre-transfer: %{time_pretransfer}\n
    | Start transfer: %{time_starttransfer}\n
    | Total: %{time_total}\n
    | HTTP Code: %{http_code}\n===============\n" https://example.com/

    출력 예시:

    ===============
    | DNS lookup: 0.002346
    | Connect: 0.003080
    | App connect: 0.008422
    | Pre-transfer: 0.008587
    | Start transfer: 0.050238
    | Total: 0.057486
    | HTTP Code: 200
    ===============

    참고: 지연 시간의 원인을 파악하려면 Application Load Balancer를 사용하여 위 단계를 완료한 다음, 해당 단계를 다시 완료하고 Application Load Balancer를 우회하십시오. 자세한 내용은 curl 웹 사이트의 curl 매뉴얼 페이지를 참조하십시오.

  • Application Load Balancer에 대한 Amazon CloudWatch TargetResponseTime 지표의 평균 통계를 확인합니다. 값이 높으면 백엔드 인스턴스 또는 애플리케이션 종속성 서버에 문제가 있는 것입니다. 자세한 내용은 Application Load Balancer에 대한 TargetResponseTime 지표가 증가하는 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

  • 지연 시간이 긴 백엔드 인스턴스를 식별하려면 Application Load Balancer의 액세스 로그 항목을 확인합니다.

  • 지연 시간 문제가 있는 백엔드 인스턴스를 식별하려면 target_processing_time이 정상 기간보다 길었는지 확인합니다.

  • Application Load Balancer 관련 문제를 확인하려면 request_processing_timeresponse_processing_time 필드에서 기간이 정상보다 길었는지 검토합니다.

    로그 항목 예시:

    http 2024-04-01T22:23:00.765170Z app/example-loadbalancer/50dc6c495c0c9188
    192.168.131.39:2817 10.0.0.1:80 0.001 12.401 0.001 200 200 34 366
    "GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - -
    arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/example-targets/73e2d6bc24d8a067
    "Root=1-58337262-36d228ad5d99923122bbe354" "-" "-"
    0 2024-04-01T22:22:48.364000Z "forward" "-" "-" "10.0.0.1:80" "200" "-" "-"

    참고: 위의 로그 항목 예시는 request_processing_time0.001, target_processing_time12.401, response_processing_time0.001임을 보여줍니다. target_processing_time 값은 정상 기간보다 길고 Application Load Balancer 대상으로 인해 지연 시간이 발생했음을 나타냅니다. 자세한 내용은 구문을 참조하십시오.

  • 높은 CPU 사용률이나 CPU 사용률 급증을 식별하려면 백엔드 인스턴스의 CloudWatch CPUUtilization 지표를 확인합니다. 높은 CPU 사용률을 해결하려면 인스턴스를 더 큰 인스턴스 유형으로 업그레이드하십시오.

  • 백엔드에서 Apache 프로세스를 검토하고 메모리 문제를 확인하려면 다음 명령을 실행합니다.

    watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

    출력 예시:

    Every 1.0s: echo -;n 'Apache Processes: ' && ps -;C apache2 -;no-headers | wc -1 && free -;m
    Apache Processes: 27
              total     used     free     shared     buffers     cached
    Mem:      8204      7445     758      0          385         4567
    -/+ buffers/cache:  2402     5801
    Swap:     16383     189      16194
  • 인스턴스에서 처리할 수 있는 동시 요청 수를 확인하려면 백엔드 인스턴스의 웹 서버에 대한 MaxClient 설정을 확인합니다. 인스턴스의 메모리 양과 CPU 사용률이 적절한데도 지연 시간이 길면 MaxClient 값을 늘리십시오.

  • Apache가 생성하는 프로세스 수(httpd)를 MaxClient 값과 비교합니다. Apache 프로세스 수가 MaxClient 값에 자주 도달하면 MaxClient 값을 늘리십시오.

    명령 예시:

    [root@ip-192.0.2.0 conf]# ps aux | grep httpd | wc -l 15

    출력 예시:

    <IfModule prefork.c>StartServers         10
    MinSpareServers      5
    MaxSpareServers      10
    ServerLimit          15
    MaxClients           15
    MaxRequestsPerChild  4000
    </IfModule>

백엔드 종속성 확인

지연 시간 문제를 일으킬 수 있는 백엔드 인스턴스의 종속성을 확인합니다. 종속성의 예로는 Amazon Simple Storage Service(Amazon S3) 버킷, 네트워크 주소 변환(NAT) 인스턴스 또는 프록시 서버, 원격 웹 서비스가 있습니다.

Linux 도구를 사용하여 성능 병목 현상 식별

서버의 성능 병목 현상을 식별하려면 다음 Linux 명령을 사용하십시오.

  • uptime 명령을 실행하여 리소스 경합으로 인해 시스템 로드 평균이 높은지 확인합니다. 출력은 실행 대기 중이거나 I/O에서 차단된 작업의 수인 시스템 로드 평균을 보여줍니다.
  • mpstat -P ALL 1 명령은 각 코어의 CPU 사용량 분석을 보여줍니다. 이 명령을 실행하여 사용량 불균형(예: 단일 스레드 애플리케이션에서 대부분의 작업을 처리하는 단일 코어)을 확인할 수 있습니다.
  • 시간 경과에 따른 리소스 사용량이 많은 프로세스와 패턴을 식별하려면 pidstat 1 명령을 실행합니다. 출력은 프로세스별 실시간 CPU 사용량을 보여줍니다.
  • dmesg | tail 명령을 실행하여 성능에 영향을 줄 수 있는 최근 시스템 수준 이벤트를 식별합니다. 출력에는 최근 10개의 시스템 메시지가 표시됩니다.
  • 많은 읽기 또는 쓰기 작업이나 느린 디스크 성능을 파악하려면 iostat -xz 1 명령을 실행합니다. 출력에는 디스크 I/O 지표와 사용량이 표시됩니다.
  • free -m 명령을 실행하여 사용 가능한 시스템 메모리를 확인합니다. 사용 가능한 메모리가 부족한 경우 시스템은 디스크 I/O와 지연 시간을 증가시키는 스왑에 의존할 수 있습니다.
  • 대역폭 포화도를 확인하려면 sar -n DEV 1 tool 명령을 실행합니다. 출력은 수신(rxkB/s) 트래픽과 전송(txkB/s) 트래픽을 포함하는 네트워크 인터페이스 처리량을 보여줍니다.
  • sar -n TCP,ETCP 1을 실행하여 연결 문제를 파악하는 데 도움이 되는 다음과 같은 주요 TCP 지표를 확인합니다.
    active/s 지표는 로컬에서 시작된 초당 TCP 연결 수입니다.
    passive/s 지표는 원격으로 시작된 초당 TCP 연결 수입니다.
    retrans/s 지표는 초당 TCP 재전송 횟수입니다. 이 지표가 높으면 패킷 손실 또는 정체가 발생할 수 있습니다.
  • 네트워크에서 대역폭을 가장 많이 사용하는 항목을 식별하려면 iftop 명령을 실행합니다. 출력은 각 연결의 활성 대역폭 사용량을 실시간으로 보여줍니다.
  • niftop 명령은 iftop의 변형으로, Red Hat Enterprise Linux(RHEL) 및 Debian 기반 배포판의 타사 리포지토리를 통해 사용할 수 있습니다. iftop이 시스템에 사전 설치되어 있지 않은 경우 niftop을 사용하십시오.

참고: Linux 배포판에 따라 위 명령 중 일부를 수동으로 설치해야 할 수도 있습니다.

AWS 공식업데이트됨 8달 전