VM 메모리 부족 오류 문제 해결

OOM 효과

Compute Engine VM의 Dataproc에서 메모리 부족(OOM) 오류가 발생하면:

  • 마스터 및 작업자 VM이 일정 기간 동안 중지됩니다.

  • 마스터 VM OOM 오류로 인해 작업이 '태스크가 획득되지 않음' 오류와 함께 실패합니다.

  • 작업자 VM OOM 오류는 YARN HDFS에서 노드가 손실되어 Dataproc 작업 실행이 지연됩니다.

Yarn 메모리 제어

Yarn은 세 가지 유형의 메모리 제어를 제공합니다.

  1. 폴링 기반(기존)
  2. 강제
  3. Elastic

기본적으로 Dataproc은 다음과 같은 이유로 YARN 메모리 제어를 사용 설정하도록 yarn.nodemanager.resource.memory.enabled를 설정하지 않습니다.

  • 컨테이너 크기가 올바르게 구성되지 않은 경우 엄격한 메모리 제어로 인해 메모리가 충분할 경우 컨테이너가 종료될 수 있습니다.
  • Elastic 메모리 제어 요구사항은 작업 실행에 부정적인 영향을 미칠 수 있습니다.
  • YARN 메모리 제어는 프로세스가 메모리를 적극적으로 사용할 때 OOM 오류를 방지하기 위해 실패할 수 있습니다.

Dataproc 메모리 보호

Dataproc 클러스터 VM이 메모리 부족 상태이면 OOM 조건이 삭제될 때까지 Dataproc 메모리 보호가 프로세스나 컨테이너를 종료합니다.

Dataproc 메모리 보호는 다음 Compute Engine 기반 Dataproc 이미지 버전의 다음 클러스터 노드에 제공됩니다.

역할 1.5 2.0 2.1
마스터 VM 1.5.74+ 2.0.48+ 모두
작업자 VM 사용 불가 2.0.76+ 2.1.24+
드라이버 풀 VM 사용 불가 2.0.76+ 2.1.24+

Dataproc 메모리 보호 종료를 식별하는 방법

  • Dataproc 메모리 보호가 137 또는 143 코드로 종료되는 프로세스를 처리합니다.
  • 워커 노드 종료:
    • Dataproc은 dataproc.googleapis.com/node/problem_count 누적 측정항목을 증분하고 reasonProcessKilledDueToMemoryPressure로 설정합니다.
    • Cloud Logging이 사용 설정되었으면 Dataproc이 '메모리 부족으로 인해 프로세스 종료됨: [프로세스 이름]'으로 google.dataproc.oom-killer 로그를 작성합니다.
    • YARN 컨테이너가 종료되면 Dataproc은 YARN 리소스 관리자에 '코드 137로 [컨테이너 ID] 종료함. 이는 [노드 ID]의 메모리 부족을 의미할 수 있음'이라는 메시지를 작성합니다
  • 마스터 또는 드라이버 풀 노드 종료: Driver received SIGTERM/SIGKILL signal and exited with [INT] code와 함께 작업 드라이버가 실패합니다.

OOM 솔루션

이 섹션에서는 OOM 문제로 인해 발생할 수 있는 작업 및 컨테이너 종료에 대한 권장사항을 제공합니다.

'드라이버가 SIGTERM/SIGKILL 신호를 수신하고 [INT] 코드로 종료됨' 오류와 함께 작업 실패

권장사항:

  • 클러스터에 드라이버 풀이 있는 경우 driver-required-memory-mb를 실젤 작업 메모리 사용량으로 늘립니다.
  • 클러스터에 드라이버 풀이 없으면 클러스터를 다시 만들어 최대 동시 작업 수를 줄입니다. 이는 (total master memory in MB - 3584MB) / driver-size-mb로 계산됩니다. 다음 방법으로 이 수를 줄일 수 있습니다.
    • dataproc:dataproc.scheduler.max-concurrent-jobs 설정하기, 또는
    • dataproc:dataproc.scheduler.driver-size-mb를 더 큰 수로 설정하기(기본값은 1024MB)
  • 추가 메모리에서 마스터 노드 머신 유형을 사용하는 것이 좋습니다.

컨테이너가 종료 코드 137 또는 143으로 종료됨

권장사항:

  • Dataproc 메모리 보호로 컨테이너가 종료된 경우(Dataproc 메모리 보호 종료를 식별하는 방법 참조).

    • 컨테이너 크기가 올바르게 구성되었는지 확인하세요.
    • yarn.nodemanager.resource.memory-mb를 줄여보세요. 이 속성은 YARN 컨테이너를 예약하는 데 사용되는 메모리 양을 제어합니다.
    • 작업 컨테이너가 지속적으로 실패하는 경우 데이터 편향으로 인해 특정 컨테이너의 사용량이 증가했는지 확인합니다. 그렇다면 작업을 다시 파티션 나누기하거나 작업자 크기를 늘려 추가 메모리 요구사항을 수용하세요.