ECS (Elastic Compute Service) インスタンスがダウンし、インスタンスでmemory cgroup kmem機能を使用しているときに [オブジェクトの残りkmalloc] メッセージがアラートログに表示された場合、このトピックで説明されているソリューションを使用して問題を解決できます。
問題の説明
インスタンスでメモリcgroup kmem機能を使用すると、インスタンスがダウンし、次のようなアラートログがインスタンスのオペレーティングシステムカーネルに表示されます。
[80569.393775] バグkmalloc-256(15:94ef869ce655ebab64b08cd78ee00d16c20efd5737493b48293de41fe41b04a0) (汚染: P B W OE ------------- T):
kmalloc-256に残っているオブジェクト (15:94ef869ce655ebab64b08cd78ee00d16c20efd5737493b48293de41fe41b04a)
[80569.397756] -----------------------------------------------------------------------------
[80569.397756]
[80569.400724] 情報: スラブ0xfffea0001e94a00オブジェクト=32 used=1 fp=0xffff88007a528000 flags=0x1fffff00004080
[80569.402702] CPU: 21 PID: 26626 Comm: dockerd汚染: P B W OE ----------- T 3.10.0-693.2.2.el7.x86_64 #1
[80569.404898] ハードウェア名: Alibaba Cloud ECS、BIOS 8f19b21 2014年4月1日
[80569.406747] ffffea0001e94a00 00004eb9a19f ffff883afee53aa0 ffffffff816a3db1
[80569.408833] ffff883afee53b78 ffffff811dbf54 ffffff00000020 ffff883afee53b88
[80569.410731] ffff883afee53b38 656a624f8190fff8 616d657220737463 6e6920676e696e69
[80569.412630] トレースを呼び出す:
[80569.414005] [<ffffffffff816a3db1>] dump_stack + 0x1 9/0x1b
[80569.415627] [<ffffffffff811dbf54>] slab_err + 0xb 4/0xe0
[80569.417204] [<ffffffffff811e0623>] ? __kmalloc + 0x1e 3/0x230
[80569.420419] [<ffffffffff811e1939>] kmem_cache_close + 0x14 9/0x2e0
[80569.422006] [<ffffffffff811e1ae4>] __kmem_cache_shutdown + 0x1 4/0x80
[80569.423606] [<ffffffffff811a6874>] kmem_cache_destroy + 0x4 4/0xf0
[80569.425149] [<ffffffffff811f6019>] kmem_cache_destroy_memcg_children + 0x8 9/0xb0
[80569.426800] [<ffffffffff811a6849>] kmem_cache_destroy + 0x1 9/0xf0
[80569.428309] [<ffffffff8123b18e>] bioset_free + 0xce/0x110
[80569.431306] [<ffffffffffc06d0b43>] dm_destroy + 0x1 3/0x20 [dm_mod]
[80569.432803] [<ffffffffffc06d69be>] dev_remove + 0x1 1e/0x180 [dm_mod]
[80569.435851] [<ffffffffc06d7015>] ctl_ioctl + 0x1e 5/0x500 [dm_mod]
[80569.437363] [<ffffffffc06d7343>] dm_ctl_ioctl + 0x1 3/0x20 [dm_mod]
[80569.438882] [<ffffffffff8121524d>] do_vfs_ioctl + 0x3 3d/0x540
[80569.443291] [<ffffffffff812154f1>] SyS_ioctl + 0xa 1/0xc0
[80569.446228] [<ffffffffff816b5009>] system_call_fastpath + 0x1 6/0x 1b
原因
インスタンスでメモリcgroup kmem機能を使用すると、kmem_cache_destroyはmemcache
を削除し、kmem_cache_destroy
がkmem_cache
を破壊する前にrefcount
が0に設定されているかどうかを確認します。 refcount
が0に設定されていない場合、一部のタスクは、kmem_cache
のmemcg cache
を使用してスラブメモリの割り当てを試みることがあります。 この場合、競合
条件がトリガーされ、その結果、インスタンスがダウンします。
解決策
ECSインスタンスのメモリcgroup kmem機能を無効にすることを推奨します。 次の手順を実行して、インスタンスのメモリcgroup kmem機能を無効にします。
次のコマンドを実行して、/etc/default/grubファイルを開きます。
vim /etc/default/grub
Iキーを押して挿入モードに入り、
GRUB_CMDLINE_LINUX
で始まる行に次の内容を追加します。cgroup.memory=nokmem
Escキーを押して挿入モードを終了し、:wqと入力し、
enter
キーを押してファイルを保存して閉じます。次のコマンドを実行して、GRand Unified Bootloader (GRUB) を更新します。
grub2-mkconfig -o /boot/grub2/grub.cfg
次のコマンドを実行して、インスタンスを再起動します。
reboot
コマンドラインツールでコマンドを実行して、インスタンスのオペレーティングシステムでメモリcgroup kmem機能を無効にできない場合は、インスタンス内のすべてのプログラムでmemory.kmem.limit_in_bytes
の値を設定しないことをお勧めします。 これにより、メモリcgroup kmem機能は無効のままになります。