Jika instance Elastic Compute Service (ECS) Anda down dan muncul pesan kesalahan Out of memory and no killable processes di log kesalahan, gunakan solusi dalam topik ini untuk menyelesaikan masalah tersebut.
Deskripsi Masalah
Instance mengalami downtime pada waktu proses dengan tampilan call stack serupa berikut:
[28663.625353] [ pid ] uid tgid total_vm rss nr_ptes nr_pmds swapents oom_score_adj name
[28663.625363] [ 1799] 0 1799 26512 245 56 3 0 -1000 sshd
[28663.625367] [29219] 0 29219 10832 126 26 3 0 -1000 systemd-udevd
[28663.625375] Kernel panic - not syncing: Out of memory and no killable processes...
[28663.634374] CPU: 1 PID: 3578 Comm: kworker/u176:4 Tainted: G OE 3.10.0-1062.9.1.el7.x86_64 #1
[28663.676873] Call Trace:
[28663.679312] [<ffffffff8139f342>] dump_stack+0x63/0x81
[28663.684421] [<ffffffff811b2245>] panic+0xf8/0x244
[28663.689184] [<ffffffff811b98db>] out_of_memory+0x2eb/0x550
[28663.694726] [<ffffffff811be254>] __alloc_pages_may_oom+0x114/0x1c0
[28663.700959] [<ffffffff811bedb3>] __alloc_pages_slowpath+0x7d3/0xa40
[28663.707279] [<ffffffff811bf229>] __alloc_pages_nodemask+0x209/0x260
[28663.713599] [<ffffffff81216535>] alloc_pages_current+0x95/0x140
[28663.719573] [<ffffffff811ba5ee>] __get_free_pages+0xe/0x40
[28663.725113] [<ffffffff81075dae>] pgd_alloc+0x1e/0x160
[28663.730225] [<ffffffff810875e4>] mm_init+0x184/0x240
[28663.735249] [<ffffffff81088102>] mm_alloc+0x52/0x60
[28663.740186] [<ffffffff81257640>] do_execveat_common.isra.37+0x250/0x780
[28663.759839] [<ffffffff81257b9c>] do_execve+0x2c/0x30
[28663.764864] [<ffffffff810a231b>] call_usermodehelper_exec_async+0xfb/0x150
[28663.777246] [<ffffffff81741dd9>] ret_from_fork+0x39/0x50Penyebab
Ketika kernel sistem operasi instance gagal mengalokasikan memori ke proses dan mencoba membunuh proses tertentu untuk melepaskan memori, tidak ada proses yang dapat dibunuh. Akibatnya, instance menjadi down. Masalah ini dapat disebabkan oleh alasan berikut:
Terjadi kebocoran memori di kernel sistem operasi, menyebabkan memori tersedia di sistem menjadi tidak cukup.
Proses-proses dengan nilai
oom_score_adjdiatur ke-1000menggunakan memori secara berlebihan dan tidak dapat dibunuh, sehingga menyebabkan memori tersedia di sistem menjadi tidak cukup.CatatanNilai
oom_score_adjadalah bilangan bulat yang menunjukkan kemungkinan suatu proses dipilih untuk OOM killing oleh kernel. Nilai lebih rendah menunjukkan proses kurang mungkin dipilih, sedangkan nilai lebih tinggi menunjukkan proses lebih mungkin dipilih.
Solusi
Sebelum melakukan operasi solusi ini pada instance bermasalah, buat snapshot untuk mencadangkan data. Hal ini mencegah hilangnya data akibat operasi tidak disengaja. Untuk informasi tentang cara membuat snapshot, lihat Buat snapshot.
Periksa apakah terjadi kebocoran memori di kernel sistem operasi.
Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika instance memiliki persentase memori slab_unreclaimable yang tinggi?
Periksa apakah nilai
oom_score_adjdiatur dengan benar.Jalankan perintah
ps,top, ataupgrepuntuk mendapatkan PID dari proses tertentu. Contoh perintah:ps aux | grep <Nama Proses>Ganti
<Nama Proses>dengan nama proses yang PID-nya ingin Anda peroleh.Jalankan perintah berikut untuk memeriksa nilai
oom_score_adj:cat /proc/<PID>/oom_score_adjGanti
<PID>dengan PID sebenarnya yang Anda peroleh.Berdasarkan lingkungan dan kebutuhan Anda, evaluasi apakah pengaturan OOM killing untuk proses sudah sesuai berdasarkan nilai
oom_score_adj. Jika nilaioom_score_adjuntuk suatu proses adalah-1000, proses tersebut memiliki prioritas lebih rendah dan kurang mungkin dipilih untuk OOM killing oleh kernel, sehingga memori tersedia di sistem mungkin menjadi tidak cukup.