暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何使用/proc/meminfo计算内存使用率及参数

watson 2025-02-23
338

在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系统提供了详细的内存使用信息。了解这些参数的含义以及如何计算内存使用率,可以帮助系统管理员和开发者更好地监控和优化系统的性能。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论