在 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 -mtotal used free shared buff/cache availableMem: 3789 229 621 0 2937 3261Swap: 0 0 0
这些值都是什么意思呢?
首先看行:Mem :表示物理内存统计Swap :表示硬盘上交换分区的使用情况(这里我们不去关心)
注:系统的总物理内存:3789M,但系统当前真正可用的内存并不是第一行 free 标记的 621M,它仅代表未被分配的内存。
接下来看列:total :总计物理内存的大小。used :已使用多大。free :可用有多少。Shared :多个进程共享的内存总额。Buffers/cached :磁盘缓存的大小。
这大致就是 Linux 下内存各项参数的含义,还有更复杂的参数,未来遇到新的场景时再做补充。
——————————- 补充 ——————————-
cat /proc/meminfoMemTotal: 3880404 kB //总内存MemFree: 637548 kB //空闲内存MemAvailable: 3340664 kBBuffers: 178760 kB //给文件的缓冲大小Cached: 2535436 kB //高速缓冲存储器使用的大小SwapCached: 0 kB //被高速缓冲存储用的交换空间大小Active: 1370440 kB //活跃使用中的高速缓冲存储器页面文件大小Inactive: 1506936 kB //不经常使用的高速缓冲存储器页面文件大小Active(anon): 163452 kBInactive(anon): 216 kBActive(file): 1206988 kBInactive(file): 1506720 kBUnevictable: 0 kBMlocked: 0 kBSwapTotal: 0 kB //交换空间总大小SwapFree: 0 kB //空闲交换空间Dirty: 76 kB //等待被写回到磁盘的大小Writeback: 0 kB //正在被写回的大小AnonPages: 163320 kB //未映射的页的大小Mapped: 65100 kB //设备和文件映射的大小Shmem: 492 kBSlab: 294180 kB //内核数据结构缓存的大小,可减少申请和释放内存带来的消耗SReclaimable: 278620 kB //可收回slab的大小SUnreclaim: 15560 kB //不可收回的slab的大小15560 + 278620 = 294180KernelStack: 2624 kBPageTables: 5720 kB //管理内存分页的索引表的大小NFS_Unstable: 0 kB //不稳定页表的大小Bounce: 0 kBWritebackTmp: 0 kBCommitLimit: 1940200 kBCommitted_AS: 586464 kBVmallocTotal: 34359738367 kB //虚拟内存大小VmallocUsed: 14160 kB //已经被使用的虚拟内存大小VmallocChunk: 34359715580 kBHardwareCorrupted: 0 kBAnonHugePages: 10240 kBCmaTotal: 0 kBCmaFree: 0 kBHugePages_Total: 0 //大页面的分配HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kBDirectMap4k: 98176 kBDirectMap2M: 4096000 kBDirectMap1G: 2097152 kB
