/proc/buddyinfo文件里,就记录着系统的内存资源。...linux内核中使用了buddy算法来管理内存以减少内存碎片的产生,buddy算法管理最小的单一为PAGE_SIZE,一般情况下大小为4K。以2的N次幂一次增加。
Linux 内存管理回顾 在陈述 THP 引起的负面现象前,先来和大家一起回忆下,Linux 操作系统是如何管理物理内存的。对于不同的体系结构,内核对应不同的内存布局图。...为了照顾慢速设备及兼顾多种 workload,Linux 将页面类型分为匿名页(Anon Page)和文件页 (Page Cache),及 swapness,使用 Page Cache 缓存文件 (慢速设备...为了尽可能快的响应用户的内存申请需求并保证系统在内存资源紧张时运行,Linux 定义了三条水位线 (high,low,min),当剩余物理内存低于 low 高于 min 水位线时,在用户申请内存时通过...extfrag/extfrag_index 观察内存碎片指数,重点关注 order >= 3 的碎片指数,当接近 1.000 时,表示碎片化严重,当接近 0 时表示内存不足; 运行 cat /proc/buddyinfo...>= 3 的剩余页面数量,pagetypeinfo 相比 buddyinfo 展示的信息更详细一些,根据迁移类型 (伙伴系统通过迁移类型实现反碎片化)进行分组,需要注意的是,当迁移类型为 Unmovable
原文:http://blog.csdn.net/guomsh/article/details/6536915 Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题...在32位CPU下寻址范围是有限的,Linux内核定义了下面三个区域: # DMA: 0x00000000 - 0x00999999 (0 - 16 MB) # LowMem: 0x01000000...查看当前LowFree值: cat /proc/meminfo | grep LowFree 查看LowMem内存碎片: cat /proc/buddyinfo 上面这命令需要在...p=430 http://www.dbanotes.net/database/linux_outofmemory_oom_killer.html http://www.sealinger.com/archives...后来分析日志文件messages发现粗体部分,分析是low memory不足导致,后来自己试验用sync ;echo 3 >> /proc/sys/vm/drop_caches可以将内存释放出来,查看/proc/buddyinfo
/proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。...子文件或子文件夹 /proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关 /proc/cmdline 启动时传递给kernel的参数信息 /proc/cpuinfo...11742 17903 21247 21812 3 asound irq self 11743 17904 2131 21813 39 buddyinfo...54666 1 linux_user_bde, Live 0xf1417000 (P) linux_user_bde 17849 0 - Live 0xf1427000 (P) root@BDSP-A...117 linux-kernel-bde2 126 linux-user-bde 127 linux-kernel-bde 128 ptm 136 pts 180 usb 189 usb_device
分析 1、linux系统内存消耗主要有三个地方: 进程 slab pagecacge 用 free 命令查看到的是系统整体的内容使用情况,而使用 ps 和 top 看到的内存使用情况都是以进程维度来看的...Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备...normal区域,可用的连续两页的内存大小为1002PAGE_SIZE;第三列值为52, 表示当前系统中normal区域,可用的连续四页的内存大小为 52*2^2* PAGE_SIZE $ cat /proc/buddyinfo...当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory),它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。...当 oom-killer 发生时,linux会选择杀死哪些进程?
root@root# cat /proc/buddyinfo Node 0, zone DMA 3 3 1 1 3 2 0...为了解决内存碎片问题,linux内核引入了page compaction技术,俗称页块整理。...148 6679 312 1 0 0 root@root# cat /proc/buddyinfo
buddyinfo 从 /proc/buddyinfo 中收集内存碎片统计信息 Linux devstat 收集设备统计信息 Dragonfly, FreeBSD drbd 收集远程镜像块设备(DRBD...)统计信息 Linux interrupts 收集更具体的中断统计信息 Linux,OpenBSD ipvs 从 /proc/net/ip_vs 中收集 IPVS 状态信息,从 /proc/net/ip_vs_stats...获取统计信息 Linux ksmd 从 /sys/kernel/mm/ksm 中获取内核和系统统计信息 Linux logind 从 logind 中收集会话统计信息 Linux meminfo_numa...从 /proc/meminfo_numa 中收集内存统计信息 Linux mountstats 从 /proc/self/mountstat 中收集文件系统统计信息,包括 NFS 客户端统计信息 Linux...nfs 从 /proc/net/rpc/nfs 中收集 NFS 统计信息,等同于 nfsstat -c Linux qdisc 收集队列推定统计信息 Linux runit 收集 runit 状态信息
/statm 进程使用的内存的状态 /proc/N/status 进程状态信息,比stat/statm更具可读性 /proc/self 链接到当前正在运行的进程 2、在根目录命名的文件: /proc/buddyinfo...proc/crypto 内核使用的所有已安装的加密密码及细节 /proc/devices 已经加载的设备并分类 /proc/dma 已注册使用的ISA DMA频道列表 /proc/execdomains linux...这个文件对root也是不可读的 /proc/uptime 系统已经运行了多久 /proc/swaps 交换空间的使用情况 /proc/version Linux内核版本和gcc版本 /proc/bus
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。...在Linux中的逻辑地址等于线性地址,也就是说Inter为了兼容把事情搞得很复杂,Linux简化顺便偷个懒。...内存碎片是系统运行的大敌,伙伴系统机制可以在一定程度上防止碎片~~另外,我们可以通过cat /proc/buddyinfo获取到各order中的空闲的页面数。...Linux中使用slab来解决小对象的分配: ? 在运行时,slab向buddy“批发”一些内存,加工切块以后“散卖”出去。...进程由不同长度的段组成:代码段、动态库的代码、全局变量和动态产生数据的堆、栈等,在Linux中为每个进程管理了一套虚拟地址空间: ?
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。...地址 在Linux内部的地址的映射过程为逻辑地址–>线性地址–>物理地址,物理地址最简单:地址总线中传输的数字信号,而线性地址和逻辑地址所表示的则是一种转换规则,线性地址规则如下: 这部分由MMU完成...机器指令中出现的是逻辑地址,逻辑地址规则如下: 在Linux中的逻辑地址等于线性地址,也就是说Inter为了兼容把事情搞得很复杂,Linux简化顺便偷个懒。...内存碎片是系统运行的大敌,伙伴系统机制可以在一定程度上防止碎片~~另外,我们可以通过cat /proc/buddyinfo获取到各order中的空闲的页面数。...Linux中使用slab来解决小对象的分配: 在运行时,slab向buddy“批发”一些内存,加工切块以后“散卖”出去。
Linux针对如何合理的使用物理内存,软件上设计了多种的内存管理方法。今天我们就来讨论下Linux是如何组织物理内存的,通俗的说就是如何管理电脑的内存条的。...Linux使用节点(node),区域(zone),页(page)三级结构来描述整个物理内存。...比如我的ubuntu机器,可以通过/proc/buddinfo看具体zone的信息 root@root-OptiPlex-7060:~$ cat /proc/buddyinfo Node 0, zone...root:/ # cat /proc/buddyinfo Node 0, zone Normal 12 7 148 52 114 39 16
本文首发于我的公众号 Linux云计算网络 Linux 用户态和内核态由于 CPU 权限的限制,通信并不像想象中的使用进程间通信方式那么简单,今天这篇文章就来看看 Linux 用户态和内核态究竟有哪些通信方式...schedstat thread-self 1042 1149 1361 149 2084 2425 291 34 398 45 65 7029 8 buddyinfo...sysctl 我们熟悉的 sysctl 是一个 Linux 命令,man sysctl 可以看到它的功能和用法。...同样的操作,Linux 也提供了文件 /etc/sysctl.conf 来让你进行批量修改。...netlink netlink 是 Linux 用户态与内核态通信最常用的一种方式。Linux kernel 2.6.14 版本才开始支持。
这个文件是将buddyinfo的内容进一步细分: Free pages count per migrate type at order -- 不同order 按照migrate type的空闲page
为了避免出现这种情况,Linux内核中引入了伙伴系统算法(Buddy system)。...也可以通过echo m > /proc/sysrq-trigger来观察buddy状态,与/proc/buddyinfo的信息是一致的: ?...Slab 在Linux中,伙伴系统(buddy system)是以页为单位管理和分配内存。但是现实的需求却以字节为单位,假如我们需要申请20Bytes,总不能分配一页吧!那岂不是严重浪费内存。
/proc文件系统 Linux内核提供了一种通过/proc文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。...子文件或子文件夹 /proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关 /proc/cmdline 启动时传递给kernel的参数信息 /proc/cmdline...proc/crypto 内核使用的所有已安装的加密密码及细节 /proc/devices 已经加载的设备并分类 /proc/dma 已注册使用的ISA DMA频道列表 /proc/execdomains Linux...这个文件对root也是不可读的 /proc/uptime 系统已经运行了多久 /proc/swaps 交换空间的使用情况 /proc/version Linux内核版本和gcc版本 /proc/bus
2.1.1 /proc/buddyinfo /proc/buddyinfo是linuxbuddy系统管理物理内存的debug信息。...NUMA系统的节点通常由CPU和其对应的本地内存(NUMA将内存划成本地/远程,CPU访问不同位置的内存,代价是不一样的),在/proc/buddyinfo中,使用"Node 0"这样的ID来标识NUMA...在linux中,可以使用boot管理器比如lilo或者grub进行linux内核的启动,也可以直接传递参数给linux内核来启动。...和2.1.1的buddyinfo的内容类似,但比/proc/buddyinfo中的内容更详细。...在buddyinfo的基础上,pagetypeinfo增加了一个新的分类也就是页的类型,NUMA节点、内存区域、buddy算法、页类型、页块的关系如下图。本节的内容参考了此链接。
因此,Linux内核必须有效地处理内存。在本节,我们将会讲述Linux的内存结构、地址分布和Linux如何有效地管理内存空间。...如果我们想要理解在Linux操作系统中的调优的可能性,我们必须理解Linux如何处理虚拟内存。...图1-12 Linux虚拟内存管理 Linux内核处理物理磁盘的写操作与Linux管理磁盘缓存紧密相连。其他的操作系统只分配部分内存作为磁盘缓存,而Linux处理内存资源则更加有效。...因此在拥有大量内存的Linux系统中,经常看到只有20MB的空闲内存。 在相同的情况下,Linux管理swap空间也非常有效率。...你可以通过/proc/buddyinfo查找伙伴系统的信息。详见“Memory used in a zone”。
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux
当然也可以从cat /proc/buddyinfo看各个page的剩余情况 root:/ # cat /proc/buddyinfo Node 0, zone Normal 338 355
领取专属 10元无门槛券
手把手带您无忧上云