首页 > TAG信息列表 > kmem
k8s 集群节点 SLUB: Unable to allocate memory on node -1 cgroup 内存泄露问题
1.原因 cgroup 的 kmem account 特性在 3.x 内核上有内存泄露问题,如果开启了 kmem account 特性 会导致可分配内存越来越少,直到无法创建新 pod 或节点异常 几点解释: kmem account 是cgroup 的一个扩展,全称CONFIG_MEMCG_KMEM,属于机器默认配置,本身没啥问题,只是该特性在 3.10 的内核内存分配
kmalloc() 除非被阻塞,函数运行的很快; 不会对所申请的内存空间清零,也就是说仍然保持原有数据; 分配的区域在物理内存是连续的; void *kmalloc(size_t size, int flag); flag有很多可选符合,常用的有GFP_KERENL,GFP_ATOMIC GFP_KERNEL:用于内核内存的通常分配方法,可能会睡眠; GFP_ATOMIarm64内存-kmem_cache-slub-分配器-结构体和框架
上一篇 : arm64内存-memblock交接内存给zoned frame allocator (buddy system) https://www.cnblogs.com/zhangzhiwei122/p/16100012.html start_kernel -> mm_init -> kmem_cache_init 启动过程,就是各种初始化,前面 mem_init 刚把 buddy system 初始化搞完,下面的 kmem_ca内核内存分配器SLAB和SLUB
内核分配器的功能 在操作系统管理的虚拟内存中,用于内存管理的最小单位是页,大多数传统的架构是4KB。由于进程每次申请分配4KB是不现实的,比如分配几个字节或几十个字节,这时需要中间机制来管理页面的微型内存。 为此,内核实现了一个分配器来管理页中碎片内存的分配和回收。可以把分配docker容器技术基础
容器! 容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品;物体可以被放置在容器中,而容器则可以保护内容物 传统虚拟化与容器的区别 虚拟化分为以下两类: 主机级虚拟化 全虚拟化半虚拟化 容器级虚拟化 容器分离开的资源: UTSlinux /dev/mem /dev/kmem驱动分析
/dev/mem 说明驱动注册用户空间调用mmap方法/dev/mem/dev/kmem 说明 /dev/mem”是linux系统的一个虚拟字符设备,无论是标准linux系统还是嵌入式linux系统,都支持该设备。 物理内存的全镜像。可以用来访问物理内存 /dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kK8S 问题排查: cgroup 内存泄露问题 - kmem
目录前言现象原因解决方案方案一方案二方案三验证方式影响范围原理解释kmem 是什么cgroup 与 kmem 机制kmem 属性的漏洞docker 与 k8s 使用 kmemslub 分配机制其他的表现 转载自 http://www.xuyasong.com/?p=2049 前言 这篇文章的全称应该叫:[在某些内核版本上,cgroup 的 kmem accarm64 linux内核内存slab分配器1---slab机制详解
文章目录 1 slab分配器原理2 slab分配器重要数据结构以及组织关系2.1 slab cache描述符struct kmem_cache2.2 slab描述符struct page 3.slab分配器中各个重要结构体间的关系总结 linux中的伙伴系统内存分配器是以页为最小粒度来进行内存分配。在实际的应用中,内核存储的大报错 cannot allocate memory 或者 no space left on device ,修复K8S内存泄露问题
问题描述 一. 当k8s集群运行日久以后,有的node无法再新建pod,并且出现如下错误,当重启服务器之后,才可以恢复正常使用。查看pod状态的时候会出现以下报错。 applying cgroup … caused: mkdir …no space left on device 或者在describe pod的时候出现cannot allocate memory 这时《内核kernel:slab内存分配模块编写》
一、模块编写 #include <linux/module.h> #include <linux/mm.h> #include <linux/slab.h> #include <linux/init.h> static char *kbuf; static int size = 21*PAGE_SIZE; static struct kmem_cache *my_cache; module_param(size, int, 0644); static内存管理-slub的分配和释放(三)
内核版本:3.10.0-693.21.1.el7.x86_641.slub cache内存的分配:kmem_cache_alloc(详见kmem_cache_alloc核心函数slab_alloc_node的实现详解) 对象的分配与释放不是直接在kmem_cache_node上面操作的,而是在kmem_cache_cpu上。一个kmem_cache维护了一组kmem_cache_cpu,分别对应is there a way to find the list of slab aliases for a given kmem_cache
Introduction The kmem subsystem in RHEL7 has changed to include cache aliases, which can be confusing. This article covers a bit of the internals of the slab aliases and which should give some pointers to faster crash analysis as well as some areas for fslab 机制
slab机制 1.内部碎片和外部碎片 外部碎片 什么是外部碎片呢?我们通过一个图来解释: 假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这