在 Linux 下 free
命令可以看出系统当前内存状况,附上 -k
, -m
, -g
可以分别输出对应单位的内存状况:
Usage:
free [options]
Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
--peta show output in petabytes
以某台 Linux Ecs 为例,运行 free -m
后的输出如下:
$ free -m
total used free shared buff/cache available
Mem: 3789 229 621 0 2937 3261
Swap: 0 0 0
这些值都是什么意思呢?
首先看行:Mem
:表示物理内存统计Swap
:表示硬盘上交换分区的使用情况(这里我们不去关心)
注:系统的总物理内存:3789M,但系统当前真正可用的内存并不是第一行 free
标记的 621M,它仅代表未被分配的内存。
接下来看列:total
:总计物理内存的大小。used
:已使用多大。free
:可用有多少。Shared
:多个进程共享的内存总额。Buffers/cached
:磁盘缓存的大小。
这大致就是 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