正文:
内容一:Linux 显示内存的命令
# free
或者:
# top
内容二:Linux 内存各项指标和机制
2.1 top 命令显示的 Linux 内存各项指标和机制 (虚拟内存和物理内存之间的机制)
1) VIRT 虚拟内存使用的大小,应用申请的内存量
2) RES 物理内存使用的大小,虚拟内存映射到物理内存的内存量,也就是真实占用的内存量
3) %MEM 物理内存占用总内存的百分比,也就是真实占用的内存比
(
补充:
输入 top 命令以后,在显示的指标中, VIRT 是指虚拟内存占用率,RES 是指物理内存占用率。
应用使用内存时第 1 步会先申请虚拟内存。在拥有了虚拟机内存以后,只有当需要的时候才会将虚拟内存应用到物理内存。而只有当物理内存被应用了以后才会被消耗。
虚拟内存包含所有的代码、数据和已经被换出去的共享库加号页。虚拟内存同时也包含被分配但是还没有被使用的页,处于此状态的页映射到了内核的 “Zero Page” 所以其不会消耗任何内存。
真实内存占用率应该是检查物理内存的占用率。
)
2.2 free 命令显示的 Linux 内存各项指标和机制 (物理内存中 free 指标、buffers 指标、cached 指标和 available 指标之间的机制)
1) total 内存的总大小
2) used 正在被使用的内存大小
3) free 表示完全没有被使用的物理内存大小
4) shared 正在被多个进程共享的内存大小
5) buffers 被内核用作块缓冲区 (buffers) 的大小。这些数据暂时存储在内存中,用于提升系统性能,当再次使用时可以在内存中被快速调用。buffers (buffer page) 代表块设备 (硬盘等设备) 所占用的缓存页,对应从硬盘中直接获取的数据,处于内存和硬盘之间,由内核使用 (当 free 状态的内存不够时,它的部分空间会自动释放出来,我们也可以手动释放出它的部分空间来)
6) cached 被内核用作文件系统缓存 (cache) 的大小。这些数据暂时存储在内存中,用于提升系统性能,当再次使用时可以在内存中被快速调用。cached (cache page) 代表普通文件数据 (硬盘里的数据) 所占用的缓存页,对应 vfs 页缓冲层的数据,处于内存和 CPU (处理器) 之间,由应用程序使用 (当 free 状态的内存不够时,它的部分空间会自动释放出来,我们也可以手动释放出它的部分空间来)
7) available = free + buffers (部分空间) + cached (部分空间),也就是估算出来的真实的内存可使用量
(
补充:释放处于 buffers 和 cached 状态内存的方法
1) 释放 page cache:
# echo 1 > /proc/sys/vm/drop_caches
2) 释放 dentries 和 inodes:
# echo 2 > /proc/sys/vm/drop_caches
3) 同时释放 pagecache、dentries 和 inodes:
# echo 3 > /proc/sys/vm/drop_caches
)
2.3 free 命令的 Mem 行和 Swap 行的机制 (物理内存和 Swap 内存 (交换内存) 之间的机制)
2.3.1 Linux 内存的种类
1) Linux 物理内存:系统的真实内存,速度快 (也就是 free 命令中显示的第 1 行)
2) Linux Swap 内存:使用硬盘作为临时的内存的空间,速度慢 (也就是 free 命令中显示的第 2 行)
2.3.2 Swap 内存 (交换内存) 被使用的条件
1) Linux 内核会周期性把内存中不常调用的匿名页和共享内存交换至 Swap 内存里。即使现在 Linux 系统的物理内存有剩余空间
2) 当系统的内存不足时,系统会把匿名页和共享内存交换至 Swap 内存里
内容四:查看那些内存可以交换至 Swap 内存以及哪些内存可以被释放
# cat /proc/meminfo
MemTotal: 65185544 kB
MemFree: 42285372 kB
MemAvailable: 57893528 kB
Buffers: 1656 kB
Cached: 16157600 kB
SwapCached: 0 kB
Active: 4505604 kB
Inactive: 17856228 kB
Active(anon): 1859740 kB
Inactive(anon): 4353236 kB
Active(file): 2645864 kB
Inactive(file): 13502992 kB
Unevictable: 16 kB
Mlocked: 16 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Zswap: 0 kB
Zswapped: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 6190160 kB
Mapped: 130544 kB
Shmem: 10400 kB
KReclaimable: 100636 kB
Slab: 234788 kB
SReclaimable: 100636 kB
SUnreclaim: 134152 kB
KernelStack: 8096 kB
PageTables: 26504 kB
SecPageTables: 696 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 32592772 kB
Committed_AS: 13920568 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 58476 kB
VmallocChunk: 0 kB
Percpu: 14464 kB
HardwareCorrupted: 0 kB
AnonHugePages: 5797888 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
Unaccepted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 284800 kB
DirectMap2M: 14784512 kB
DirectMap1G: 51380224 kB
(
补充:
1) Active(anon) 经常被使用的内存
2) Inactive(anon) 没有被经常使用的内存,也是 Linux 系统可以从物理内存交换至交换分区里的内存
3) Active(file) 经常被使用的页缓存内存
4) Inactive(file) 没有被经常使用的页缓存内存,也是 buffers/cached 中可以被系统回收的内存
)
参考文献:
https://access.redhat.com/solutions/296313




















