/proc/meminfo 学习

本文深入解析Linux系统的内存管理机制,详细介绍通过cat /proc/meminfo命令获取的各种内存状态信息,如MemTotal、MemFree、MemAvailable等字段的具体含义,帮助读者理解Linux如何高效管理内存资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在查看linux内存使用情况时,通常需要用到命令(cat /proc/meminfo)查看内核数据结构,有些字段大致知道什么意思,时间久了也容易忘记,故在这里详细记录一下。

[root@localhost ~]# cat /proc/meminfo
MemTotal:         932004 kB
MemFree:          567160 kB
MemAvailable:     596804 kB
Buffers:            2108 kB
Cached:           149480 kB
SwapCached:            0 kB
Active:           110300 kB
Inactive:         115516 kB
Active(anon):      74696 kB
Inactive(anon):     6928 kB
Active(file):      35604 kB
Inactive(file):   108588 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         74260 kB
Mapped:            25928 kB
Shmem:              7396 kB
Slab:              63576 kB
SReclaimable:      25804 kB
SUnreclaim:        37772 kB
KernelStack:        4736 kB
PageTables:         4444 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2563148 kB
Committed_AS:     301100 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      180428 kB
VmallocChunk:   34359310332 kB
HardwareCorrupted:     0 kB
AnonHugePages:      8192 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       73600 kB
DirectMap2M:      974848 kB
DirectMap1G:           0 kB

MemTotal:总内存

MemFree:空闲内存

MemAvailable:可用内存

Buffers:给文件的缓冲大小

Cached:高速缓冲存储器

SwapCached:被高速缓冲存储用的交换空间的大小

Active:活跃使用中的高速缓冲存储器页面文件大小

Inactive:不经常使用中的告诉缓冲存储器文件大小

active(anon):活跃的匿名内存(进程中堆上分配的内存,是用malloc分配的内存)

Inactive(anon):不活跃的匿名内存

file内存:磁盘高速缓存的内存空间和“文件映射(将物理磁盘上的文件内容与用户进程的逻辑地址直接关联)”的内存空间,其中的内容与物理磁盘上的文件相对应

Active(file):活跃的file内存

Inactive(file):不活跃的file内存

Unevictable:不能被释放的内存页

Mlocked:mlock()系统调用锁定的内存大小

SwapTotal:交换空间总大小

SwapFree:空闲交换空间

Dirty:等待被写回到磁盘的大小

Writeback:正在被写回的大小

AnonPages:未映射页的大小

Mapped:设备和文件映射大小

Shmem:已经被分配的共享内存大小

Slab:内核数据结构缓存大小

SReclaimable:可收回slab的大小

SUnreclaim:不可回收的slab的大小

KernelStack:kernel消耗的内存

PageTables:管理内存分页的索引表的大小

NFS_Unstable:不稳定页表的大小

Bounce:在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存

WritevackTmp:FUSE用于临时写回缓冲区的内存

CommitLimit:系统实际可分配内存总量

Committed_AS:统当前已分配的内存总量

VmallocTotal:虚拟内存大小

VmallocUsed:已经被使用的虚拟内存大小

VmallocChunk:vmalloc 可分配的最大的逻辑连续的内存大小

HardwareCorrupted:删除掉的内存页的总大小(当系统检测到内存的硬件故障时)

HugePages : Linux 操作系统的一个内核特性,让操作系统可以支持现代硬件架构的大页面容量功能

AnonHugePages:匿名 HugePages 数量

CmaTotal:总的连续可用内存

CmaFree:空闲的连续内存

HugePages_Total:预留HugePages的总个数

HugePages_Free:池中尚未分配的 HugePages 数量

HugePages_Rsvd:表示池中已经被应用程序分配但尚未使用的 HugePages 数量

HugePages_Surp:这个值得意思是当开始配置了20个大页,现在修改配置为16,那么这个参数就会显示为4,一般不修改配置,这个值都是0

HugePagesize:每个大页的大小

DirectMap4k:映射TLB为4kB的内存数量

DirectMap2M:映射TLB为2M的内存数量

DirectMap1G:映射TLB为1G的内存数量

 

 

 

 

 

学习地址:https://blog.youkuaiyun.com/shaoyunzhe/article/details/54614077

                 http://www.eeworld.com.cn/mp/ymc/a52758.jspx

                 http://linuxperf.com/?p=142

<think>首先,用户的问题是关于Linux系统的:用户想在Linux系统中修改或查看/proc/meminfo中MemTotal的值。用户提供了四个引用:[^1]、[^2]、[^3]、[^4],这些是关于/proc/meminfo的解释,包括MemTotal的含义。关键点:-/proc/meminfo是一个虚拟文件系统,由Linux内核提供,用于显示系统内存信息。-根据引用[^2],MemTotal表示内核管理的总物理内存大小,但它可能不等于实际的物理内存大小,因为firmware/BIOS和内核本身会占用一些内存。这个值在系统运行期间是固定的。-引用[^4]提到MemTotal不是直接可修改的,因为它是一个内核状态。用户的需求:-**查看MemTotal的值**:这是直接和简单的。用户可以通过命令查看/proc/meminfo的内容。-**修改MemTotal的值**:从引用中看,MemTotal是基于实际内存的统计值,不能随意修改,因为它是内核计算的。修改可能涉及内核启动参数或系统配置。系统级指令:1.所有行内数学表达式使用$...$格式。2.独立公式使用$$...$$格式并单独成段。3.LaTeX语法正确。4.使用中文回答。5.生成相关问题。6.回答中引用的段落末尾添加引用标识如[^1]。用户可见层指令:-回答结构清晰,帮助用户逐步解决问题。-保证回答真实可靠。我的回答结构:1.**解答问题**:分步骤解释如何查看和试图修改MemTotal。-首先,解释查看方法:使用`cat/proc/meminfo`命令。-其次,解释修改部分:说明MemTotal通常是只读的,为什么不能修改,以及可能的间接方式(如调整内核启动参数)。2.**引用相关部分**:在适当位置添加引用标识。3.**生成相关问题**:在回答末尾添加相关问题。回答语言:中文。可能的步骤:-**查看MemTotal**:-在终端运行:`cat/proc/meminfo|grepMemTotal`-这会显示MemTotal的值。-**修改MemTotal**:-MemTotal不是直接可修改的文件;/proc文件系统是只读的,表示内核状态。-修改实际内存配置可能涉及BIOS/UEFI设置或内核启动参数(如mem=size启动选项),但这不是修改MemTotal本身,而是影响初始内存分配。-警告用户修改可能不稳定或破坏系统。从引用[^2]:"MemTotal表示内存管理系统管理的总物理内存大小...这个值在系统运行期间一般是固定不变的。如果设备发生重启,这个值可能会发生变化。"所以重启系统或改变内存配置才可能影响它。核心观点:不能直接修改/proc/meminfo的内容,因为它不是真实文件;它是内核虚拟的。试图修改它会出错。添加生成的相关问题。确保回答清晰:1.介绍:简述/proc/meminfo的作用。2.查看MemTotal:详细步骤。3.修改MemTotal:解释为什么难、可能的替代。4.总结建议。5.相关问题。使用引用:-[^1]是/proc/meminfo详解。-[^2]解释MemTotal的来源。-[^3]关于buffers/cache。-[^4]解释MemAvailable。在回答中:-当解释MemTotal不可修改时,引用[^2]:"...这个值在系统运行期间一般是固定不变..."-当提到内存使用情况时,引用[^4]。最终回答结构:-标题(如果需要)-步骤1:如何查看-步骤2:是否能修改和为什么-步骤3:如果需要改变内存分配的选项-结尾:建议-§§相关问题§§</think> ### 如何在Linux系统中查看或修改/proc/meminfo中的MemTotal值 在Linux系统中,`/proc/meminfo` 是一个虚拟文件系统(procfs),由内核动态生成,用于实时展示系统内存使用情况。`MemTotal` 表示内核管理的总物理内存大小,但它可能不等于实际安装的物理内存总量(如BIOS保留的内存会减少可用值)。`/proc/meminfo` 文件是内核统计数据的只读视图,其内容不能直接修改[^2]。下面我为您逐步解释如何安全查看和处理MemTotal的值。 #### 1. **查看 MemTotal 的值** 查看过程非常简单,您只需要在Linux终端中使用命令行工具: - **步骤**: 1. 打开终端。 2. 运行命令查看整个 `/proc/meminfo` 文件,并过滤出 MemTotal: ```bash cat /proc/meminfo | grep MemTotal ``` 或者只输出MemTotal的值: ```bash grep MemTotal /proc/meminfo ``` 3. 输出示例(单位kB): ``` MemTotal: 7570916 kB ``` 这里,`7570916 kB` 是内核管理的总物理内存量,可能比实际物理内存小(如8GB物理内存可能显示约7.5GB),因为内核启动时会保留部分内存给固件或自身使用[^2]。 - **解释**: - `/proc/meminfo` 是虚拟文件,每次读取时都从内核获取最新状态。 - MemTotal是固定值,除非系统重启或硬件配置变更,否则不会变化。这是系统级别的内存统计,不能由用户应用程序直接修改[^2][^4]。 #### 2. **修改 MemTotal 的值?不可能的原因和替代方案** **注意:MemTotal的值不能直接修改**。原因包括: - `/proc` 文件系统是内核提供的只读接口,任何写入尝试都会失败(例如 `echo 'value' > /proc/meminfo` 会报错"Permission denied")。 - MemTotal基于物理内存分配(在启动时由BIOS/UEFI和内核决定)。改变它需要调整系统底层配置: - **唯一可行的间接方式**:修改内核启动参数或硬件设置,但这不是直接编辑 `/proc/meminfo`。 - **方法(重启后生效)**: 1. 编辑GRUB配置文件(例如 `/etc/default/grub`),添加内存限制参数 `mem=size`(例如 `mem=8G`)。 2. 运行 `sudo update-grub` 更新配置。 3. 重启系统:`sudo reboot`。 4. 重启后,再次查看 `/proc/meminfo`,MemTotal可能增加或减少(取决于参数设置)。 - **警告**:此操作风险高: - `mem=size` 参数强制内核使用特定内存大小,可能导致系统不稳定或无法启动(如果设置过大或过小)。 - 物理内存实际可用值不会改变;这只是限制内核管理的内存范围,MemFree和MemAvailable可能受影响[^2][^4]。 - **示例命令(修改GRUB)**: ```bash sudo nano /etc/default/grub # 在 GRUB_CMDLINE_LINUX 行添加 mem=8192M (表示8GB) sudo update-grub sudo reboot ``` - 正常使用中,**不建议人为修改MemTotal**。如果需要更多应用可用内存,应关注 MemFree 和 MemAvailable(后者估算应用可用内存:近似 MemFree + Buffers + Cached[^4])。优化内存可通过清除缓存: ```bash sync; echo 3 > /proc/sys/vm/drop_caches # 释放缓存但不重置MemTotal ``` #### 建议总结 - **查看**:用 `grep MemTotal /proc/meminfo` 快速获取值。 - **修改**:MemTotal 不能直接编辑,因为它是内核只读状态。强制修改需通过系统重启和内核参数调整(有风险)。 - **可靠性说明**:真实环境保持MemTotal不变是最稳定的。如果您误操作后系统异常,请回复具体错误,我会帮助诊断。 基于Linux内存管理机制,`/proc/meminfo` 提供了关键指标,但 MemTotal 的不可修改特性确保了系统稳定性[^2][^4]。如果您是开发或调试用途,请优先检查其他可调参数如 `/proc/sys/vm/`。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼盼编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值