SLUB: Unable to allocate memory java-Docker内存限制导致SLUB无法使用大页面缓存进行分配

现象

系统突然很卡顿, 分析内存和磁盘状态缺都很正常, 部署pod一直失败.
查看/var/log/messages 日志文件发现一直报错如下

Jul 18 21:29:01 ip-10-10-17-135 kernel: [186998.252395] SLUB: Unable to allocate memory on node -1 (gfp=0x2080020)
Jul 18 21:29:01 ip-10-10-17-135 kernel: [186998.252402]   cache: kmalloc-2048(2412:6c2c4ef2026a77599d279450517cb061545fa963ff9faab731daab2a1f672915), object size: 2048, buffer size: 2048, default order: 3, min order: 0
Jul 18 21:29:01 ip-10-10-17-135 kernel: [186998.252407]   node 0: slabs: 135, objs: 1950, free: 64
Jul 18 21:29:01 ip-10-10-17-135 kernel: [186998.252409]   node 1: slabs: 130, objs: 1716, free: 0

解决办法

  • 手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

  • 执行 echo 3 > /proc/sys/vm/drop_caches 命令清除pagecache和slab分配器中的缓存对象

  • java 10之后JVM 参数中使用 -XX:-UseContainerSupport 关闭容器支持可能会有帮助, 但是原博主VonC测试后发现对处理页面缓存没有太大用处
    在这里插入图片描述

原因

内核bug, 执行slabtopiostat命令可获取相关信息, 详细分析过程及相关问题讨论可查看参考链接

参考

1. https://stackoverflow.com/questions/57103486/docker-memory-limit-causes-slub-unable-to-allocate-with-large-page-cache
2. https://www.lmlphp.com/user/151653/article/item/3675464/
3. https://stackoverflow.com/questions/43405813/linux-slub-unable-to-allocate-memory-on-node

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值