206
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
阿里云服务器ECS实例宕机并产生日志“Objects remaining in kmalloc”怎么解决?

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>

4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 

5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>>   


点击这里点击这里进入阿里云ECS官方页面,立即免费体验云服务器ECS>>>

实例宕机并产生日志“Objects remaining in kmalloc”

  • 问题描述

    当您在ECS实例内使用memory cgroup kmem功能时,内核有类似于如下所示的告警日志,且实例出现了宕机。调用栈类似如下:

     
    [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/0x1b
  • 问题原因

    在使用memory cgroup kmem功能的过程中,kmem_cache_destroy在销毁kmem_cache时,会先删除memcg cache再检查refcount是否为0。由于refcount不为0,因此可能存在其他合法任务尝试通过当前kmem_cachememcg cache分配slab,进而导致race触发宕机。

  • 解决方案

    建议您在ECS实例内,关闭memory cgroup kmem功能。操作步骤如下:

    1. 运行以下命令,打开/etc/default/grub文件。

       
      vim /etc/default/grub
    2. i键进入编辑模式,在GRUB_CMDLINE_LINUX中添加以下配置信息。

       
      cgroup.memory=nokmem

      OS

    3. Esc键退出编辑模式,并输入:wq后按Enter键,保存退出文件。

    4. 运行以下命令,更新GRUB。

       
      grub2-mkconfig -o /boot/grub2/grub.cfg
    5. 运行以下命令,重启ECS实例。

       
      reboot

    如果您的操作系统无法通过命令行(cmdline)关闭memory cgroup kmem,则建议您在ECS实例内的任何程序均不配置memory.kmem.limit_in_bytes的值。即可保证memory cgroup kmem功能未开启。


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!