![使用 ramdisk (initrd) 通过 /proc/meminfo 测量可用 ram](https://linux22.com/image/32072/%E4%BD%BF%E7%94%A8%20ramdisk%20(initrd)%20%E9%80%9A%E8%BF%87%20%2Fproc%2Fmeminfo%20%E6%B5%8B%E9%87%8F%E5%8F%AF%E7%94%A8%20ram.png)
我通过 PXE 启动磁盘映像,它是initrd
ramdisk 上的完整系统。我想测量系统的实际可用内存(不包括缓冲区和文件系统缓存)。有人告诉我,这是通过添加 中的 MemFree、Buffers 和 Cached 值来完成的/proc/meminfo
。对于常规系统,这可以给出准确的结果。
然而,使用我的 ramdisk 设置,它不会给出准确的结果。我假设 ramdisk 使用的内存已添加到“Cached”值中:
[root@node1 ~]# cat /proc/meminfo
MemTotal: 8173700 kB
MemFree: 7443696 kB
Buffers: 0 kB
Cached: 650236 kB
SwapCached: 0 kB
MemCommitted: 0 kB
VirtualSwap: 0 kB
Active: 27156 kB
Inactive: 632204 kB
Active(anon): 4636 kB
Inactive(anon): 4616 kB
Active(file): 22520 kB
Inactive(file): 627588 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 9156 kB
Mapped: 8712 kB
Shmem: 128 kB
Slab: 38548 kB
SReclaimable: 29420 kB
SUnreclaim: 9128 kB
KernelStack: 536 kB
PageTables: 1268 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4086848 kB
Committed_AS: 51216 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 288032 kB
VmallocChunk: 34359448036 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 10240 kB
DirectMap2M: 8378368 kB
现在不幸的是,这给了我想要计算的两个指标的错误值:%MemUsed 和 AmountMemFreeActual。对于 Ramdisk,“缓存”值至少部分是不可回收的,因此不能用于计算实际的可用内存。
为了正确计算两者,我需要知道 ramdisk 的内存使用情况,并且我认为我不能简单地采用“缓存”值,因为这可能还包括其他缓存文件系统数据。
最好我想将 ramdisk 内存使用情况从这两个指标中剔除,因为据我所知它是不可回收的内存。有什么想法去哪里看吗?
编辑:“免费”(@answer1)确实提供了相同的错误值。 “免费”输出中的“免费”值无论如何都会产生误导。 “空闲”内存通常是“空闲”+“缓冲区”+“缓存”。我的问题是 ramdisk 作为不可回收内存(与通常缓存的文件系统数据不同)无法回收。
答案1
是否有原因导致您无法使用该free
命令来确定可用 RAM 量?
# free output in MBs
$ free -m
total used free shared buffers cached
Mem: 7800 6724 1075 0 397 1952
-/+ buffers/cache: 4374 3425
Swap: 5823 27 5796
上图显示,如果没有缓冲区和高速缓存,大约还有 3.4GB 可用空间。