Linux内存参数详细说明(free+/proc/meminfo)

由于Linux内存命令很多,几乎都可以通过这些命令知道:linux内存占用率多少?linux内存使用率多少?以及还剩下多少内存?哪个程序应用占得最多?......等等。

Linux内存详细说明

 

在做服务器或程序优化的时候,这个也是很重要的。可以知道你服务器是否需要升级?程序代码是否需要优化?

 

一般我们用 free+/proc/meminfo 就基本上可以了解以上所有的东西了。因此,这里重点就以这两个命令为主了。就算你用其它命令也一样,原理也都是相同的,参数结果意思也是一样的。

 

一、Linux内存命令:free 参数详细解释

在 Linux 下 free 命令可以看出系统当前内存状况。

 

以某台 Linux Ecs 为例,运行 free -m 后的输出如下:

[[email protected] ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3789         229         621           0        2937        3261
Swap:             0           0           0

 

1、首先看行:

Mem :表示物理内存统计

Swap :表示硬盘上交换分区的使用情况(这里我们不去关心)

 

注意:

系统的总物理内存:3789M,但系统当前真正可用的内存并不是第一行 free 标记的 621M,它仅代表未被分配的内存。

 

2、接下来看列:

total :总计物理内存的大小。

used :已使用多大。

free :可用有多少。

Shared :多个进程共享的内存总额。

Buffers/cached :磁盘缓存的大小。

 

二、Linux内存命令:/proc/meminfo 参数详细解释

 

我们还可以查看Linux内存更加复杂的东西,例如:

cat /proc/meminfo 
MemTotal:        3880404 kB      //总内存
MemFree:          637548 kB      //空闲内存
MemAvailable:    3340664 kB
Buffers:          178760 kB      //给文件的缓冲大小
Cached:          2535436 kB      //高速缓冲存储器使用的大小
SwapCached:            0 kB      //被高速缓冲存储用的交换空间大小
Active:          1370440 kB      //活跃使用中的高速缓冲存储器页面文件大小
Inactive:        1506936 kB      //不经常使用的高速缓冲存储器页面文件大小
Active(anon):     163452 kB
Inactive(anon):      216 kB
Active(file):    1206988 kB
Inactive(file):  1506720 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB      //交换空间总大小
SwapFree:              0 kB      //空闲交换空间
Dirty:                76 kB      //等待被写回到磁盘的大小
Writeback:             0 kB      //正在被写回的大小
AnonPages:        163320 kB      //未映射的页的大小
Mapped:            65100 kB      //设备和文件映射的大小
Shmem:               492 kB      
Slab:             294180 kB      //内核数据结构缓存的大小,可减少申请和释放内存带来的消耗
SReclaimable:     278620 kB      //可收回slab的大小
SUnreclaim:        15560 kB      //不可收回的slab的大小15560 + 278620 = 294180
KernelStack:        2624 kB
PageTables:         5720 kB       //管理内存分页的索引表的大小
NFS_Unstable:          0 kB       //不稳定页表的大小
Bounce:                0 kB 
WritebackTmp:          0 kB
CommitLimit:     1940200 kB
Committed_AS:     586464 kB
VmallocTotal:   34359738367 kB    //虚拟内存大小
VmallocUsed:       14160 kB       //已经被使用的虚拟内存大小
VmallocChunk:   34359715580 kB
HardwareCorrupted:     0 kB
AnonHugePages:     10240 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0         //大页面的分配
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       98176 kB
DirectMap2M:     4096000 kB
DirectMap1G:     2097152 kB

 

1、MemTotal:内存总数

系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。

 

2、MemFree:空闲内存数

表示系统尚未使用的内存。MemUsed=MemTotal-MemFree 就是已被用掉的内存。

 

3、MemAvailable:可用内存数

应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计值。它与MemFree的关键区别点在于,MemFree是说的系统层面,MemAvailable是说的应用程序层面。

 

4、Buffer:缓冲区内存数

 

5、Cache:缓存区内存数

 

6、Shared:多个进程共享的内存空间,不常用,暂不讨论。

 

Buffer与Cache的区别

这里说下buffer与cache的区别,首先,从字面意义上讲,buffer是缓冲的意思,cache是缓存的意思。举个现实中的例子,比说铁道头上像弹簧一样的东西,就叫缓冲;部署在森林里的存应急物资的保管箱,名叫“Food Cache”,类似一种保存箱。

其次,常见的说法,叫write-buffer和read-cache,buffer一般用作写操作上,cache一般用在读操作上,不过也不是一成不变的; 举例说明,每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了;Cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到加快取速度的作用。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了,加快了数据取用的速度。

 

三、Linux内存计算公式:

参照 free 的输出结果,这里有几个计算公式:

[[email protected] ~]# free
             total       used       free     shared    buffers     cached
Mem:      16433020    1827360   14605660        740     203540    1051400
-/+ buffers/cache:     572420   15860600
Swap:      8388604          0    8388604

为了直观说明,我们把:

第2行,Mem 行,我这里称作 OS Mem;

第3行,buffers/cache 行,称作 APP buffer/cache:

 

OS Mem total = OS Mem used + OS Mem free

APP buffers/cache used = OS Mem used - OS Mem buffers - OS Mem cached

APP buffers/cache free = OS Mem free + OS Mem buffers + OS Mem cached

APP buffers/cache total = APP buffers/cache used + APP buffers/cache free = OS Mem total

    A+
发布日期:2021年01月26日 10:43:56  所属分类:Linux
最后更新时间:2021-01-26 10:47:45
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
vue.js视频教程:全新 Vue.js 2.6 核心技术合集
  • ¥ 69.0元
  • 市场价:69.0元
前端工程化构建工具:Babel7+Webpack4
  • ¥ 15元
  • 市场价:15元
数据科学与人工智能:必备数学基础
  • ¥ 298.0元
  • 市场价:398.0元
C++基础入门到进阶视频教程
  • ¥ 498.0元
  • 市场价:498.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: