Halaman ini memberikan informasi tentang error kehabisan memori (OOM) Dataproc di VM Compute Engine, dan menjelaskan langkah-langkah yang dapat Anda lakukan untuk memecahkan masalah dan menyelesaikan error OOM.
Efek error OOM
Saat Dataproc di VM Compute Engine mengalami error kehabisan memori (OOM), efeknya mencakup kondisi berikut:
VM master dan pekerja berhenti berfungsi selama jangka waktu tertentu.
Error OOM VM Master menyebabkan tugas gagal dengan error "tugas tidak diperoleh".
Error OOM VM pekerja menyebabkan hilangnya node di YARN HDFS, yang menunda eksekusi tugas Dataproc.
Kontrol memori YARN
Apache YARN menyediakan jenis kontrol memori berikut:
- Berbasis polling (lama)
- Ketat
- 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 penampung saat ada memori yang memadai jika ukuran penampung tidak dikonfigurasi dengan benar.
- Persyaratan kontrol memori elastis dapat memengaruhi eksekusi tugas secara negatif.
- Kontrol memori YARN dapat gagal mencegah error OOM saat proses menggunakan memori secara agresif.
Perlindungan memori Dataproc
Saat VM cluster Dataproc mengalami tekanan memori, perlindungan memori Dataproc akan menghentikan proses atau penampung hingga kondisi OOM dihapus.
Dataproc menyediakan perlindungan memori untuk node cluster berikut dalam versi image Dataproc di Compute Engine berikut:
Peran | 1,5 | 2.0 | 2.1 | 2.2 |
---|---|---|---|---|
VM Master | 1.5.74+ | 2.0.48+ | semua | semua |
VM Pekerja | Tidak Tersedia | 2.0.76+ | 2.1.24+ | semua |
VM Driver Pool | Tidak Tersedia | 2.0.76+ | 2.1.24+ | semua |
Mengidentifikasi dan mengonfirmasi penghentian perlindungan memori
Anda dapat menggunakan informasi berikut untuk mengidentifikasi dan mengonfirmasi penghentian tugas karena tekanan memori.
Pemutusan proses
Proses yang dihentikan oleh perlindungan memori Dataproc akan keluar dengan kode
137
atau143
.Saat Dataproc menghentikan proses karena tekanan memori, tindakan atau kondisi berikut dapat terjadi:
- Dataproc menambahkan metrik kumulatif
dataproc.googleapis.com/node/problem_count
, dan menetapkanreason
keProcessKilledDueToMemoryPressure
. Lihat Pengumpulan metrik resource Dataproc. - Dataproc menulis log
google.dataproc.oom-killer
dengan pesan:"A process is killed due to memory pressure: process name
. Untuk melihat pesan ini, aktifkan Logging, lalu gunakan filter log berikut:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"A process is killed due to memory pressure:"
- Dataproc menambahkan metrik kumulatif
Penghentian tugas node master atau node pool driver
Saat tugas node master Dataproc atau node pool driver dihentikan karena tekanan memori, tugas akan gagal dengan kode
Driver received SIGTERM/SIGKILL signal and exited with INT
error. Untuk melihat pesan ini, aktifkan Logging, lalu gunakan filter log berikut:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"Driver received SIGTERM/SIGKILL signal and exited with"
- Periksa log
google.dataproc.oom-killer
ataudataproc.googleapis.com/node/problem_count
untuk mengonfirmasi bahwa Dataproc Memory Protection menghentikan tugas (lihat Penghentian proses).
Solusi:
- Jika cluster memiliki
driver pool,
tingkatkan
driver-required-memory-mb
ke penggunaan memori tugas yang sebenarnya. - Jika cluster tidak memiliki kumpulan driver, buat ulang cluster, yang akan menurunkan jumlah maksimum tugas serentak yang berjalan di cluster.
- Gunakan jenis mesin node master dengan memori yang ditingkatkan.
- Periksa log
Penghentian penampung YARN node pekerja
Dataproc menulis pesan berikut di pengelola resource YARN:
container id exited with code EXIT_CODE
. Untuk melihat pesan ini, aktifkan logging, lalu gunakan filter log berikut:resource.type="cloud_dataproc_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.cluster_uuid="CLUSTER_UUID" jsonPayload.message:"container" AND "exited with code" AND "which potentially signifies memory pressure on NODE
Jika penampung keluar dengan
code INT
, periksa loggoogle.dataproc.oom-killer
ataudataproc.googleapis.com/node/problem_count
untuk mengonfirmasi bahwa Perlindungan Memori Dataproc menghentikan tugas (lihat Penghentian proses).Solusi:
- Pastikan ukuran penampung dikonfigurasi dengan benar.
- Pertimbangkan untuk menurunkan
yarn.nodemanager.resource.memory-mb
. Properti ini mengontrol jumlah memori yang digunakan untuk menjadwalkan penampung YARN. - Jika penampung tugas gagal secara konsisten, periksa apakah kemiringan data menyebabkan peningkatan penggunaan penampung tertentu. Jika demikian, bagi ulang tugas atau tingkatkan ukuran pekerja untuk mengakomodasi persyaratan memori tambahan.