Vmstat命令中活跃内存和非活跃内存

开发 前端
vmstat看到的active/inactive memory就分别是active list和inactive list中的内存大小。如果inactive list很大,表明在必要时可以回收的页面很多;而如果inactive list很小,说明可以回收的页面不多。

vmstat -a 命令能看到active memory 和 inactive memory:

但它们的含义在manpage中只给了简单的说明,并未详细解释:

inact: the amount of inactive memory. (-a option)active: the amount of active memory. (-a option)

在此我们试图准确理解它的含义。通过阅读vmstat的源代码(vmstat.c和proc/sysinfo.c)得知,vmstat命令是直接从/proc/meminfo中获取的数据:

而/proc/meminfo的数据是在以下内核函数中生成的:

这段代码的意思是统计所有的LRU list,其中Active Memory等于ACTIVE_ANON与ACTIVE_FILE之和,Inactive Memory等于INACTIVE_ANON与INACTIVE_FILE之和。

LRU list是Linux kernel的内存页面回收算法(Page Frame Reclaiming Algorithm)所使用的数据结构,LRU是Least Recently Used的缩写词。这个算法的核心思想是:回收的页面应该是最近使用得最少的,为了实现这个目标,最理想的情况是每个页面都有一个年龄项,用于记录最近一次访问页面的时间,可惜x86 CPU硬件并不支持这个特性,x86 CPU只能做到在访问页面时设置一个标志位Access Bit,无法记录时间,所以Linux Kernel使用了一个折衷的方法:它采用了LRU list列表,把刚访问过的页面放在列首,越接近列尾的就是越长时间未访问过的页面,这样,虽然不能记录访问时间,但利用页面在LRU list中的相对位置也可以轻松找到年龄最长的页面。Linux kernel设计了两种LRU list: active list 和 inactive list, 刚访问过的页面放进active list,长时间未访问过的页面放进inactive list,这样从inactive list回收页面就变得简单了。内核线程kswapd会周期性地把active list中符合条件的页面移到inactive list中,这项转移工作是由refill_inactive_zone()完成的。

LRU list 示意图

vmstat看到的active/inactive memory就分别是active list和inactive list中的内存大小。如果inactive list很大,表明在必要时可以回收的页面很多;而如果inactive list很小,说明可以回收的页面不多。

Active/inactive memory是针对用户进程所占用的内存而言的,内核占用的内存(包括slab)不在其中。

至于在源代码中看到的ACTIVE_ANON和ACTIVE_FILE,分别表示anonymous pages和file-backed pages。用户进程的内存页分为两种:与文件关联的内存(比如程序文件、数据文件所对应的内存页)和与文件无关的内存(比如进程的堆栈,用malloc申请的内存),前者称为file-backed pages,后者称为anonymous pages。File-backed pages在发生换页(page-in或page-out)时,是从它对应的文件读入或写出;anonymous pages在发生换页时,是对交换区进行读/写操作。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2010-02-04 09:26:34

Linux vmsta

2010-06-02 12:47:12

Linux 内存监控

2010-03-03 16:53:40

Linux Ubunt

2022-10-08 11:34:07

业务分析用户活跃

2021-07-15 10:49:17

私有云云计算混合云

2010-04-12 14:30:41

Ubuntu 10.0

2013-10-12 13:01:51

Linux运维内存管理

2010-07-26 12:48:34

IDC

2022-02-07 09:07:38

黑客供应链攻击SolarWinds

2024-09-26 12:28:49

2023-11-01 08:07:42

.NETC#

2014-01-14 10:52:06

Linux vmsta虚拟内存

2012-03-22 21:07:24

iOS

2021-12-24 10:01:55

勒索团伙攻击勒索软件

2020-10-10 10:40:20

APT组织分析

2011-07-27 15:28:39

Opera Mini浏览器

2024-12-10 07:12:00

2021-12-06 14:02:25

勒索软件攻击数据泄露

2009-03-02 09:13:00

LinuxFedora操作系统

2024-10-28 10:33:03

数据飞轮
点赞
收藏

51CTO技术栈公众号