前言
平时工作中也会查看一些零碎的内存指标,但对一些参数的具体含意不太分明,这里记录下常见参数的含意。
内存参数介绍
平时咱们看的比拟多的可能是通过 top 命令显示的内存指标
下面的图中和程序内存相干的列次要是三列:
VIRT(Virtual Memory): 虚拟内存大小, 它是程序应用的虚拟地址空间大小, 蕴含代码段、数据、共享库等局部所占的大小。
RES(Resident Memory): 常驻内存大小, 程序运行时占用的物理内存大小。
SHR(Shared Memory): 共享内存大小, 它是多个过程共享的内存大小, 比方共享库占用的内存。
这可能是咱们平时用的比拟多的查看和内存相干的指标,但除了这些,linux 中其实有更丰盛的和内存相干的指标数据,它存在于 /proc/meminfo 文件,这外面蕴含了更为详尽的各种内存指标数据:
MemTotal: 总内存大小;
MemFree: 闲暇的物理内存大小;
Buffers: 缓存的数据大小;
Cached: 磁盘缓存的大小;
SwapCached: 替换缓存的大小, 包含在替换分区中的和曾经被替换进来的;
Active: 正在应用的内存数量, 即依据最近应用程序寄存在内存中的页面;
Inactive: 不沉闷的内存大小, 这些页面尽管还在内存中, 然而曾经很长时间没有应用, 须要用户空间程序或内核从新申请能力复用;
SwapTotal: 替换分区总大小;
SwapFree: 未应用的替换分区大小;
Dirty: 期待写入到磁盘的内存大小;
Writeback: 正在被写回到磁盘的脏页大小;
AnonPages: 匿名页的大小, 即没有对应文件的页, 通常是由用户过程映射的页;
Mapped: 映射文件的大小;
Slab: 内核中应用的缓存对象的大小;
这里我只是截取了比拟罕用的一些指标进行列举,还有其它的一些指标没有介绍,能够发现这里的内存指标真是不少。其实,咱们方才介绍的 top 指令,还有罕用的 free 命令,它们的内存数据都是来自这里。
其中,有两个参数 Buffers 和Cached(即 buffer,cache),我想再介绍下,因为我感觉可能很多人和我一样对这两个参数的含意含混不清。
buffer&cache
Buffers 是对原始磁盘块的长期存储,也就是用来缓存磁盘的数据,通常不会特地大(20MB 左右)。这样,内核就能够把扩散的写集中起来,对立优化磁盘的写入,比方,从磁盘读取数据时,将更无效地将一个较大的数据块读入缓冲区,而后将其分段传输到应用程序中,而不是一次读取一个字节。缓冲区有助于缩小读取数据所需的 I / O 操作数量,并进步零碎的性能。
Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就能够间接从内存中疾速获取,而不须要再次拜访迟缓的磁盘。例如,当文件被读入内存时,内核可能会在缓存中保留文件的正本。如果再次申请该文件,则内核能够从缓存中检索文件,而不是从较慢的硬盘中读取文件。这缩小了拜访文件所需的工夫,并进步了零碎的性能。
所以,总结下,buffer 和 cache 都用于进步零碎性能,但它们用于不同的上下文。buffer 用于 I / O 操作期间的长期存储,而 cache 用于缓存常常应用的数据,以放慢对这些数据的拜访。