Memecahkan masalah error VM kehabisan memori

Efek OOM

Saat Dataproc di VM Compute Engine mengalami error kehabisan memori (OOM):

  • VM master dan pekerja akan dibekukan selama jangka waktu tertentu.

  • Error OOM VM master menyebabkan tugas gagal dengan error "tugas tidak diperoleh".

  • Error OOM VM pekerja menyebabkan hilangnya node pada YARN HDFS, yang menunda eksekusi tugas Dataproc.

Kontrol memori benang

Yarn menyediakan tiga jenis kontrol memori:

  1. Berbasis polling (lama)
  2. Ketat
  3. Elastic

Secara default, Dataproc tidak menetapkan yarn.nodemanager.resource.memory.enabled untuk mengaktifkan kontrol memori YARN, karena alasan berikut:

  • Kontrol memori yang ketat dapat menyebabkan penghentian container jika tersedia memori yang cukup jika ukuran container tidak dikonfigurasi dengan benar.
  • Persyaratan kontrol memori elastis dapat berdampak buruk pada eksekusi tugas.
  • Kontrol memori YARN dapat gagal mencegah error OOM saat proses menggunakan memori secara agresif.

Perlindungan memori Dataproc

Saat VM cluster Dataproc berada di bawah tekanan memori, perlindungan memori Dataproc akan menghentikan proses atau container hingga kondisi OOM dihapus.

Perlindungan memori Dataproc disediakan untuk node cluster berikut pada versi image Dataproc di Compute Engine berikut:

Peran 1,5 2.0 2.1
VM Master 1.5.74+ 2.0.48+ all
VM Pekerja Tidak Tersedia 2.0.76+ 2.1.24+
VM Kumpulan Pengemudi Tidak Tersedia 2.0.76+ 2.1.24+

Cara mengidentifikasi penghentian perlindungan memori Dataproc

  • Proses ketika perlindungan memori Dataproc menghentikan exit dengan kode 137 atau 143.
  • Penghentian node pekerja:
    • Dataproc menambahkan metrik kumulatif dataproc.googleapis.com/node/problem_count, dan menetapkan reason ke ProcessKilledDueToMemoryPressure.
    • Jika Cloud Logging diaktifkan, Dataproc akan menulis log google.dataproc.oom-killer dengan pesan "A process is death due to memory tekanan: [process name]".
    • Jika container YARN dihentikan, Dataproc akan menulis pesan berikut di resource manager YARN: "[ID container] keluar dengan kode 137, yang berpotensi menandakan tekanan memori pada [ID node]"
  • Penghentian node master atau driver: driver tugas gagal dengan Driver received SIGTERM/SIGKILL signal and exited with [INT] code.

Solusi OOM

Bagian ini memberikan rekomendasi untuk penghentian tugas dan container yang dapat disebabkan oleh masalah OOM.

Tugas gagal dengan pesan "Driver menerima sinyal SIGTERM/SIGKILL dan keluar dengan kode [INT]"

Rekomendasi:

  • Jika cluster memiliki kumpulan driver, tingkatkan driver-required-memory-mb untuk penggunaan memori tugas akutal.
  • Jika cluster tidak memiliki kumpulan driver, buat ulang cluster, menurunkan jumlah maksimum tugas serentak, yang dihitung sebagai (total master memory in MB - 3584MB) / driver-size-mb. Anda dapat menurunkan jumlah ini dengan:
    • Menyetel dataproc:dataproc.scheduler.max-concurrent-jobs, atau
    • Menyetel dataproc:dataproc.scheduler.driver-size-mb ke angka yang lebih besar (defaultnya adalah 1024MB).
  • Pertimbangkan untuk menggunakan jenis mesin node master dengan memori tambahan.

Penampung dikeluarkan dengan kode keluar 137 atau 143

Rekomendasi:

  • Jika perlindungan memori Dataproc menghentikan container (lihat Cara mengidentifikasi penghentian perlindungan memori Dataproc):

    • Pastikan ukuran container dikonfigurasi dengan benar.
    • Sebaiknya turunkan yarn.nodemanager.resource.memory-mb. Properti ini mengontrol jumlah memori yang digunakan untuk menjadwalkan container YARN.
    • Jika container tugas terus-menerus gagal, periksa apakah kemiringan data menyebabkan peningkatan penggunaan penampung tertentu. Jika ya, partisi ulang tugas atau tingkatkan ukuran pekerja untuk mengakomodasi persyaratan memori tambahan.