在Linux系统中,/proc/meminfo文件是一个非常重要的接口,它提供了关于系统内存状态的详细信息。这些信息可以帮助系统管理员和开发者了解系统的内存使用情况,并进行相应的优化和故障排除。本文将详细介绍如何使用/proc/meminfo文件内的信息计算内存使用率,并解释其中的主要参数。
一 计算内存使用率
要计算Linux系统的内存使用率,可以通过读取/proc/meminfo文件中的相关参数来完成。内存使用率的计算通常*基于以下几个关键参数:
MemTotal:系统的总内存量。
MemFree:当前未被使用的内存量。
Buffers:用于文件缓冲的内存量。
Cached:用于页面缓存的内存量。
一个简单但常用的内存使用率计算公式是:
$$
\text{内存使用率} = \frac{\text{MemTotal} - \text{MemFree} - \text{Buffers} - \text{Cached}}{\text{MemTotal}} \times 100%
$$
这个公式考虑了系统总内存中除去空闲内存和缓冲/缓存内存后的使用情况。然而,这个计算方法可能并不完全准确,因为它没有考虑到所有可回收的内存。为了得到更精确的结果,可以使用MemAvailable参数,它表示应用程序可以使用的内存量,计算公式如下:
$$
\text{内存使用率} = \frac{\text{MemTotal} - \text{MemAvailable}}{\text{MemTotal}} \times 100%
$$
二 /proc/meminfo参数详解
MemTotal:表示系统可用的物理内存总量(不包括系统本身占用的内存)。
MemFree:表示当前未被使用的内存。
MemAvailable:表示系统可供应用程序使用的内存量,这是一个估计值,考虑了可回收的缓存和缓冲区。
Buffers:表示用于文件缓冲的内存大小。
Cached:表示用于页面缓存的内存大小。
SwapCached:表示被缓存的交换空间大小。
Active:表示活跃使用中的高速缓冲存储器页面文件大小。
Inactive:表示不经常使用中的高速缓冲存储器文件大小。
Active(anon):表示活跃的匿名内存(进程中堆上分配的内存)。
Inactive(anon):表示不活跃的匿名内存。
Active(file):表示活跃的file内存。
Inactive(file):表示不活跃的file内存。
Unevictable:表示不能被释放的内存页。
Mlocked:表示通过mlock()系统调用锁定的内存大小。
SwapTotal:表示交换空间的总大小。
SwapFree:表示空闲交换空间的大小。
Dirty:表示等待写回到磁盘的内存大小。
Writeback:表示正在写回到磁盘的内存大小。
AnonPages:表示未映射到文件的匿名内存大小。
Mapped:表示映射到文件的内存大小。
Shmem:表示共享内存的大小。
Slab:表示内核数据结构缓存的大小。
SReclaimable:表示可回收的Slab内存大小。
SUnreclaim:表示不可回收的Slab内存大小。
KernelStack:表示内核栈使用的内存大小。
PageTables:表示管理内存分页的索引表的大小。
NFS_Unstable:表示不稳定页表的大小。
Bounce:表示用于低端内存跳转缓冲区的大小。
WritebackTmp:表示FUSE用于临时写回缓冲区的内存大小。
CommitLimit:表示系统实际可分配内存总量。
Committed_AS:表示系统当前已分配的内存总量。
VmallocTotal:表示虚拟内存的大小。
VmallocUsed:表示已经被使用的虚拟内存大小。
VmallocChunk:表示vmalloc可分配的最大的逻辑连续内存大小。
HardwareCorrupted:表示由于硬件故障而被删除的内存页的总大小。
AnonHugePages:表示匿名HugePages的数量。
CmaTotal:表示总的连续可用内存。
CmaFree:表示空闲的连续内存。
HugePages_Total:表示预留HugePages的总个数。
HugePages_Free:表示池中尚未分配的HugePages数量。
HugePages_Rsvd:表示池中已经被应用程序分配但尚未使用的HugePages数量。
HugePages_Surp:表示超出配置的HugePages数量。
Hugepagesize:表示每个大页的大小。
DirectMap4k:表示映射TLB为4kB的内存数量。
DirectMap2M:表示映射TLB为2M的内存数量。
DirectMap1G:表示映射TLB为1G的内存数量。
总结
通过/proc/meminfo文件,Linux系统提供了详细的内存使用信息。了解这些参数的含义以及如何计算内存使用率,可以帮助系统管理员和开发者更好地监控和优化系统的性能。




