Jika instance Elastic Compute Service (ECS) Anda mengalami down dan pesan Objects remaining in kmalloc muncul di log peringatan saat menggunakan fitur kmem memory cgroup pada instance tersebut, gunakan solusi dalam topik ini untuk menyelesaikan masalah.
Deskripsi masalah
Saat menggunakan fitur kmem memory cgroup pada sebuah instance, instance tersebut mengalami down dan log peringatan serupa dengan berikut ini muncul di kernel sistem operasi:
[80569.393775] BUG kmalloc-256(15:94ef869ce655ebab64b08cd78ee00d16c20efd5737493b48293de41fe41b04a0) (Tainted: P B W OE ------------ T):
Objects remaining in kmalloc-256(15:94ef869ce655ebab64b08cd78ee00d16c20efd5737493b48293de41fe41b04a
[80569.397756] -----------------------------------------------------------------------------
[80569.397756]
[80569.400724] INFO: Slab 0xffffea0001e94a00 objects=32 used=1 fp=0xffff88007a528000 flags=0x1fffff00004080
[80569.402702] CPU: 21 PID: 26626 Comm: dockerd Tainted: P B W OE ------------ T 3.10.0-693.2.2.el7.x86_64 #1
[80569.404898] Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS 8f19b21 04/01/2014
[80569.406747] ffffea0001e94a00 000000004eb9a19f ffff883afee53aa0 ffffffff816a3db1
[80569.408833] ffff883afee53b78 ffffffff811dbf54 ffffffff00000020 ffff883afee53b88
[80569.410731] ffff883afee53b38 656a624f8190fff8 616d657220737463 6e6920676e696e69
[80569.412630] Call Trace:
[80569.414005] [<ffffffff816a3db1>] dump_stack+0x19/0x1b
[80569.415627] [<ffffffff811dbf54>] slab_err+0xb4/0xe0
[80569.417204] [<ffffffff811e0623>] ? __kmalloc+0x1e3/0x230
[80569.420419] [<ffffffff811e1939>] kmem_cache_close+0x149/0x2e0
[80569.422006] [<ffffffff811e1ae4>] __kmem_cache_shutdown+0x14/0x80
[80569.423606] [<ffffffff811a6874>] kmem_cache_destroy+0x44/0xf0
[80569.425149] [<ffffffff811f6019>] kmem_cache_destroy_memcg_children+0x89/0xb0
[80569.426800] [<ffffffff811a6849>] kmem_cache_destroy+0x19/0xf0
[80569.428309] [<ffffffff8123b18e>] bioset_free+0xce/0x110
[80569.431306] [<ffffffffc06d0b43>] dm_destroy+0x13/0x20 [dm_mod]
[80569.432803] [<ffffffffc06d69be>] dev_remove+0x11e/0x180 [dm_mod]
[80569.435851] [<ffffffffc06d7015>] ctl_ioctl+0x1e5/0x500 [dm_mod]
[80569.437363] [<ffffffffc06d7343>] dm_ctl_ioctl+0x13/0x20 [dm_mod]
[80569.438882] [<ffffffff8121524d>] do_vfs_ioctl+0x33d/0x540
[80569.443291] [<ffffffff812154f1>] SyS_ioctl+0xa1/0xc0
[80569.446228] [<ffffffff816b5009>] system_call_fastpath+0x16/0x1bPenyebab
Saat menggunakan fitur kmem memory cgroup pada sebuah instance, fungsi kmem_cache_destroy menghapus memcg cache dan memeriksa apakah refcount disetel ke 0 sebelum menghapus kmem_cache. Jika refcount tidak disetel ke 0, beberapa tugas mungkin mencoba mengalokasikan memori slab menggunakan memcg cache dari kmem_cache. Dalam situasi ini, kondisi race terpicu, sehingga menyebabkan instance mengalami down.
Solusi
Sebelum melakukan operasi pada instance tempat masalah terjadi, kami sarankan Anda membuat snapshot untuk mencadangkan data. Ini mencegah hilangnya data akibat operasi yang tidak disengaja. Untuk informasi tentang cara membuat snapshot, lihat Buat snapshot.
Kami sarankan Anda menonaktifkan fitur kmem memory cgroup di instance ECS. Ikuti langkah-langkah berikut untuk menonaktifkannya:
Jalankan perintah berikut untuk membuka file /etc/default/grub:
vim /etc/default/grubTekan tombol I untuk masuk ke mode Sisipkan dan tambahkan konten berikut ke baris yang dimulai dengan
GRUB_CMDLINE_LINUX:cgroup.memory=nokmem
Tekan tombol Esc untuk keluar dari mode Sisipkan, masukkan :wq, lalu tekan tombol
Enteruntuk menyimpan dan menutup file.Jalankan perintah berikut untuk memperbarui GRand Unified Bootloader (GRUB):
grub2-mkconfig -o /boot/grub2/grub.cfgJalankan perintah berikut untuk me-restart instance:
reboot
Jika fitur kmem memory cgroup tidak dapat dinonaktifkan di sistem operasi instance Anda melalui alat baris perintah, kami sarankan Anda tidak menyetel nilai memory.kmem.limit_in_bytes di semua program dalam instance Anda. Hal ini memastikan bahwa fitur kmem memory cgroup tetap dinonaktifkan.