查看当前内存使用情况,最常用的指令就是
[root@t ~]# free -m total used free shared buffers cached Mem: 128700 105888 22812 395 0 574 -/+ buffers/cache: 105313 23386 Swap: 0 0 0
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
used1: 表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1: 未被分配的内存。
shared1: 共享内存,一般系统不会用到,这里也不讨论。
buffers1: 系统分配但未被使用的buffers 数量。
cached1: 系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
free2: 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存
[root@~]# cat /proc/meminfo
MemTotal: 131789100 kB
MemFree: 23367084 kB
MemAvailable: 23872172 kB
Buffers: 228 kB
Cached: 997224 kB
SwapCached: 0 kB
Active: 96364752 kB
Inactive: 10617236 kB
Active(anon): 95958228 kB
Inactive(anon): 10431640 kB
Active(file): 406524 kB
Inactive(file): 185596 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 105983064 kB
Mapped: 62720 kB
Shmem: 405332 kB
Slab: 272340 kB
SReclaimable: 163808 kB
SUnreclaim: 108532 kB
KernelStack: 13344 kB
PageTables: 245164 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 65894548 kB
Committed_AS: 119839644 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 362048 kB
VmallocChunk: 34359360512 kB
HardwareCorrupted: 0 kB
AnonHugePages: 66662400 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 353264 kB
DirectMap2M: 25800704 kB
DirectMap1G: 110100480 kB
说明:
MemTotal: 131789100 kB 可用的总内存--总物理内存减去kernel 代码/数据段占用再减去保留的内存区,系统从加电开始到引导完成,firmware/BIOS要保留一些内存,kernel本身要占用一些内存,最后剩下可供kernel支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
MemFree: 23367084 kB 完全未用到的物理内存 LowFree+HighFree,[MemTotal-MemFree]就是已被用掉的内存。这是从OS角度搜集的数据。
MemAvailable: 23872172 kB 字面意思为可用内存,这是一个从应用角度搜集的数据,是内核使用特定的算法估算出来的,要注意这是一个估计值,并不精确。从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.)
Buffers: 228 kB 缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
Cached: 997224 kB 高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。
SwapCached: 0 kB 内存足够的情况下,这个值一般为0
那些匿名内存页,比如用户进程通过malloc()申请的内存页是没有关联任何文件的(有别于backing storage基于磁盘文件的内存页),如果发生swapping换页,这类内存页会被写入交换区。从一个匿名内存页被确定要被换页开始,它就被计入了swap cache,但是不一定会被立刻写入物理交换区,因为Linux的原则是除非绝对必要,尽量避免I/O。所以swap cache中包含的是被确定要swapping换页、但是尚未写入物理交换区的匿名内存页。
Active: 95675704 kB (pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]),缓冲或页面缓存内存的总量,活跃的使用 这是最近的内存回收和通常不用于其他目的。
Inactive: 5615140 kB pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE],缓冲或页面缓存内存的总量,这是免费的和可用的。这是最近没有使用内存,可以回收用于其他目的。
Active(anon): 95590152 kB 分别表示anonymous pages和mapped pages。用户进程的内存页分为两种:与文件关联的内存(比如程序文件、数据文件所对应的内存页)和与文件无关的内存(比如进程的堆栈,用malloc申请的内存),前者称为file pages或mapped pages,后者称为anonymous pages,这部分具体可以参考LRU 内存管理算法,
HighMem跟LowMem是32bitX86 上面的一种划分,860MB以上内存成为HighMem,ARM架构上面没有这样的划分方式;
Inactive(anon): 5579872 kB
Active(file): 85552 kB
Inactive(file): 35268 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 31743996 kB 可用的swap空间的总的大小
SwapFree: 24693072 kB 剩余swap空间的大小,内存换出到swap的过程,kswapd()-->balance_pgdat()-->shrink_zone()-->shrink_inactive_list()-->shrink_page_list()(核心函数)-_swap()-->get_swap_page()
Dirty: 12 kB 需要写入磁盘的内存区大小
Writeback: 0 kB 正在被写回磁盘的大小
AnonPages: 100707440 kB 未映射页的内存大小
Mapped: 61560 kB 设备和文件等映射的大小。
Shmem: 154012 kB
Slab: 272120 kB 内核数据结构slab的大小,可以减少申请和释放内存带来的消耗。
SReclaimable: 169236 kB 可收回Slab的大小
SUnreclaim: 102884 kB 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack: 13352 kB
PageTables: 245108 kB 管理内存分页页面的索引表的大小。
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 97638544 kB
Committed_AS: 119813492 kB 内存的总量估计完成工作量。 这个值代表的是最坏的情况下的价值,还包括交换内存。
VmallocTotal: 34359738367 kB 内存的总量分配总量的虚拟地址空间。
VmallocUsed: 370836 kB 使用虚拟地址空间
VmallocChunk: 34359359536 kB 最大的连续内存块,可用的虚拟地址空间。
HardwareCorrupted: 0 kB
AnonHugePages: 66578432 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 353264 kB
DirectMap2M: 25800704 kB
DirectMap1G: 110100480 kB
持续更新。。。